我怎样才能显示我的机器人是谁在 DMing 而不能 DM。 (discord.py)

时间:2021-05-06 23:32:31

标签: python logging discord discord.py message

我理解这个问题的措辞不正确或可能没有任何意义,所以我将提供一些关于我正在尝试做什么的背景和信息......

背景

我正在尝试创建一个机器人,它可以向我服务器中的每个人发送 DM 以提醒他们诸如此类,我已经掌握了有关如何执行此操作的代码,但是我在弄清楚如何使其显示,机器人是谁时遇到了麻烦是 DMing 和谁不是 DMing。 我已经研究了很多,但还没有找到将我带到这里的解决方案。

问题 我怎样才能显示我的机器人是谁在 DMing 而不能 DM。 (机器人确实会做它应该做的事情,根据请求向服务器中的每个人发送 DM,但我希望它通过终端/pycharm/IDE 显示。

例如:用户#1000 已成功向用户#2000 发送消息!

import discord
import os, time, random
from discord.ext import commands
from lol import token
client = discord.Client()

intents = discord.Intents.all()
client = commands.Bot(command_prefix="!", intents=intents, self_bot = True)

@client.event
async def on_ready():
    print("Ready!")
    
@client.command()
async def dm_all(ctx, *, args=None):
    if args != None:
        members = ctx.guild.members
        for member in members:
            try:
                await member.send(args)
                await print(ctx.discriminator.author)
            except:
                print("Unable to DM user because the user has DMs off or this is a bot account!")
    else: 
        await ctx.send("Please provide a valid message.")


client.run(token, bot=True)

1 个答案:

答案 0 :(得分:1)

以下是一些需要了解的重要事项:

  1. 如果用户无法收到 DM,则会收到 Forbidden 错误。

  2. 您可以使用 except 语句记录这些错误并将其显示在控制台中。

  3. 大多数情况下,您无法向聊天机器人发送直接消息,然后会收到 HTTPException 错误。

看看下面的代码:

@client.command()
async def dm_all(ctx, *, args=None):
    if args is not None:
        members = ctx.guild.members
        for member in members:
            try:
                await member.send(args)
                print(f"Sent a DM to {member.name}")
            except discord.errors.Forbidden:
                print(f"Could not send a DM to: {member.name}")
            except discord.errors.HTTPException:
                print(f"Could not send a DM to: {member.name}")

    else:
        await ctx.send("Please provide a valid message.")

输出:

Sent a DM to Dominik
Could not send a DM to: BotNameHere
  • 当然,您可以根据自己的意愿自定义 member.name

参考: https://discordpy.readthedocs.io/en/latest/api.html?highlight=forbidden#discord.Forbidden