在大家开始假设之前,我有权执行此命令。
@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 通知了一些成员并且它奏效了)
我该如何解决这个错误?
答案 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