Discord.py - 向每个成员发送消息

时间:2021-01-26 00:01:46

标签: python python-3.x discord discord.py discord.py-rewrite

在大家开始假设之前,我有权执行此命令。

@bot.command()
@commands.has_permissions(administrator=True)
async def dm(ctx, *, message=None):
    await ctx.message.delete()
    if message:
        for guilds in bot.guilds:
            members = guilds.members
            for m in members:
                await m.send(message)
                print("Message sent to all")

我收到一个错误:

Command raised an exception: HTTPException: 400 Bad Request (error code: 50007): Cannot send messages to this user

因为我正在通知每个成员,所以有些成员确实打开了他们的 dms(我个人已经使用他们的 ID 通知了一些成员并且它奏效了)

我该如何解决这个错误?

2 个答案:

答案 0 :(得分:1)

您收到此错误是因为机器人无法发送 DM,因为用户禁用了他们的 DM 或只有朋友,您可以列出没有收到 DM 的用户。

您可以通过以下方式查看谁没有收到 DM。

@bot.command()
@commands.has_permissions(administrator=True)
async def dm(ctx, *, message=None):
    await ctx.send(f"{ctx.author.mention} Message sent to all users in this server except the users listed below.")
    await ctx.message.delete()
    if message:
        for guilds in bot.guilds:
            members = guilds.members
            for m in members:
                try:
                    await m.send(message)
                except discord.Forbidden: # discord.Forbidden means that the bot can't be sent.
                    await ctx.send(f"{m.name}#{m.discriminator}")

我希望这有帮助,我觉得 Kelo 的回答并没有真正解释太多,所以我试图帮助和改进代码。

祝您有美好的一天!

答案 1 :(得分:0)

您可以使用 try-except 来避免错误。

try:
    await m.send(message)
except:
    pass