【问题标题】:How do I make a discord py bot sending dms如何制作不和谐的 py 机器人发送 dms
【发布时间】:2021-06-29 21:45:19
【问题描述】:

嘿,这是我的代码,我希望机器人 dms 带有“测试”的成员

@has_permissions(kick_members=True)
@client.command()
async def kick(ctx, member: discord.Member, *, reason=None):
    embed_kick = discord.Embed(title=f'Kick command usage')

    embed_kick.set_footer(text=f'VexArtz Community Discord')

    embed_kick.add_field(name=f'Kicked user', value=f'{member}', inline=True)
    embed_kick.add_field(name=f'Reason', value=f'-{reason}', inline=True)
    embed_kick.add_field(name=f'Author', value=f'{ctx.author.mention}', inline=True)
    await member.kick(reason=reason)
    await ctx.channel.purge(limit=1)
    log_channel = client.get_channel(858716439849861121)
    await log_channel.send(embed=embed_kick)

【问题讨论】:

标签: python discord discord.py bots


【解决方案1】:
  • 您可以使用fetch_user 获取会员的方法。
  • create_dm 使用用户创建 DMChannel。 这应该很少被调用,因为这对大多数人来说都是透明的。

好吧,既然我们已经获取了该成员并创建了一个 DM Channel 对象,我们现在可以使用该对象向该成员或同一用户发送消息。

@has_permissions(kick_members=True)
@client.command()
async def kick(ctx, member: discord.Member, *, reason=None):
    embed_kick = discord.Embed(title=f'Kick command usage')

    embed_kick.set_footer(text=f'VexArtz Community Discord')

    embed_kick.add_field(name=f'Kicked user', value=f'{member}', inline=True)
    embed_kick.add_field(name=f'Reason', value=f'-{reason}', inline=True)
    embed_kick.add_field(name=f'Author', value=f'{ctx.author.mention}', inline=True)
    
    user = await client.fetch_user(member.id) #Fetch the user with its id
    dm = await user.create_dm() #If dm is already made, it does not matter :)
    await dm.send("test")
    
    await member.kick(reason=reason)

    await ctx.channel.purge(limit=1)
    log_channel = client.get_channel(858716439849861121)
    await log_channel.send(embed=embed_kick)

我们可以使用相同的member.send(),但可能会出现错误。

如:

HTTPException – 发送消息失败。

禁止 - 您没有发送消息的适当权限。

【讨论】:

    【解决方案2】:

    您可以通过member.send() 向用户发送消息。我猜您想向被踢的用户发送消息?在这种情况下,您的代码可能看起来像这样


    @has_permissions(kick_members=True)
    @client.command()
    async def kick(ctx, member: discord.Member, *, reason=None):
        embed_kick = discord.Embed(title=f'Kick command usage')
    
        embed_kick.set_footer(text=f'VexArtz Community Discord')
    
        embed_kick.add_field(name=f'Kicked user', value=f'{member}', inline=True)
        embed_kick.add_field(name=f'Reason', value=f'-{reason}', inline=True)
        embed_kick.add_field(name=f'Author', value=f'{ctx.author.mention}', inline=True)
       
        await member.send(content = "test") # send message to member being kicked
    
        await member.kick(reason=reason)
    
        await ctx.channel.purge(limit=1)
        log_channel = client.get_channel(858716439849861121)
        await log_channel.send(embed=embed_kick)
    

    【讨论】:

    • 小记:你需要先DM用户,然后理想地踢他们。如果用户和机器人不共享服务器,则您无法 DM 该人
    • 很好,我会在答案中改变它。谢谢!
    猜你喜欢
    • 2020-10-08
    • 2021-03-13
    • 2021-08-19
    • 2021-08-11
    • 2022-01-11
    • 1970-01-01
    • 2020-06-20
    • 2021-07-07
    • 2021-03-21
    相关资源
    最近更新 更多