我不明白为什么这段代码有错误:
@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
另外,请注意,我不是出于恶意目的使用它。我知道滥用此权限可能会导致禁止。
答案 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!")
不是错字。