DM每个人命令

时间:2020-09-26 19:58:22

标签: python discord discord.py discord.py-rewrite dm

我不明白为什么这段代码有错误:

@client.command()
async def dmall(ctx, message):
    for m in client.get_all_members():
        await m.send(message)
    await ctx.send("Done!")

我的DM已打开,但以下是错误: 我也尝试过将其与alt一起使用,但存在相同的错误。

Traceback (most recent call last):
  File "/opt/virtualenvs/python3/lib/python3.8/site-packages/discord/ext/commands/core.py", line 85, in wrapped
    ret = await coro(*args, **kwargs)
  File "main.py", line 49, in dmall
    await m.send("Hello! This is a DM :)")
  File "/opt/virtualenvs/python3/lib/python3.8/site-packages/discord/abc.py", line 850, in send
    channel = await self._get_channel()
  File "/opt/virtualenvs/python3/lib/python3.8/site-packages/discord/member.py", line 243, in _get_channel
    ch = await self.create_dm()
  File "/opt/virtualenvs/python3/lib/python3.8/site-packages/discord/user.py", line 715, in create_dm
    data = await state.http.start_private_message(self.id)
  File "/opt/virtualenvs/python3/lib/python3.8/site-packages/discord/http.py", line 245, in request
    raise HTTPException(r, data)
discord.errors.HTTPException: 400 Bad Request (error code: 50007): Cannot send messages to this user

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
  File "/opt/virtualenvs/python3/lib/python3.8/site-packages/discord/ext/commands/bot.py", line 903, in invoke
    await ctx.command.invoke(ctx)
  File "/opt/virtualenvs/python3/lib/python3.8/site-packages/discord/ext/commands/core.py", line 855, in invoke
    await injected(*ctx.args, **ctx.kwargs)
  File "/opt/virtualenvs/python3/lib/python3.8/site-packages/discord/ext/commands/core.py", line 94, in wrapped
    raise CommandInvokeError(exc) from exc
discord.ext.commands.errors.CommandInvokeError: Command raised an exception: HTTPException: 400 Bad Request (error code: 50007): Cannot send messages to this user

另外,请注意,我不是出于恶意目的使用它。我知道滥用此权限可能会导致禁止。

2 个答案:

答案 0 :(得分:0)

使用try语句将使其跳过所有无法发送消息的用户:

@client.command()
async def dmall(ctx, message):
    for m in client.get_all_members():
        try:
           await m.send(message)
        except:
           print("couldn't send message to "+m)
    await ctx.send("Done!")

这可能是不和谐方面的错误,或者您的漫游器在服务器中的权限出了问题。

答案 1 :(得分:0)

我实际上已经将代码放在我的代码文件夹中了一段时间了,代码将会是

@client.command()
async def dmall(ctx, *, message):
    guild = ctx.guild
    for m in guild.members:
        try:
            await m.send(message)
            await ctx.send(f"[Success] Successfully sent to {m}.")

        except Exception as e:
            await ctx.send(f"[Failure] Failed to send to {m}\n\n\n{e}")

    await ctx.send(f"[Done] Finnished!")

请注意,await ctx.send(f"[Done] Finnished!")不是错字。