0

我刚刚开始编写 Discord 机器人。我目前正在开发一个帮助龙与地下城游戏的机器人(骰子滚动和主动跟踪目前正在工作)。我已经让我的机器人与在服务器中调用命令的用户一起将私人卷发送给 DM,但在实际的 DM 中,机器人只响应help命令。

我已经阅读了这个解释,但它对我来说似乎仍然没有用,因为我希望它响应 DM 中的命令,而不是获取 DM 中发送给它的消息的内容。例如,假设我在一个带有机器人的服务器中,并且我使用whisperRoll命令,这会导致机器人向我发送带有我的掷骰结果的 DM。现在我已经和机器人私聊了,我想再为自己做一次,让其他玩家看不到,所以我尝试使用rollDM 频道中的命令。我想做的是像在服务器中响应一样响应 DM 中的命令。

我想知道是否可能有一组默认命令被注册为“有效”,以便机器人在我丢失的 DM 中响应?我真的无法在任何地方找到答案,我什至不知道从哪里开始。

非常感谢你的帮忙!

编辑:我当前的代码,它给了我一个CommandInvokeError

def _prefix_callable(bot, msg):
    prefix = '!'
    guild = msg.guild
    if p.prefixInfo == []:
        pass
    else:
        prefix = p.getPrefix(guild)
    
    if not guild:
        return commands.when_mentioned_or(prefix)(bot, msg)
    return commands.when_mentioned_or(prefix)(bot, msg)

bot = commands.Bot(command_prefix=_prefix_callable, description=description, help_command = None)

p.getPrefix(guild) 调用此代码:

def getPrefix(self, guild):
        for data in self.prefixInfo:
            if data[0] == str(hash(guild)):
                return data[1]
        return "!"

我目前正在通过 csv 搜索给定公会的正确前缀。

4

2 回答 2

1

您可以使用discord.channel.DMChannel对象

例如:

async def check(ctx, arg):
    if isinstance(ctx.channel, discord.channel.DMChannel):
        await ctx.send(arg)
于 2021-07-12T10:44:46.807 回答
0

用于带前缀的 dms

def get_prefix(message):
    prefix = "?"  # default prefix
    if not message.guild:  # if in dms
        return commands.when_mentioned_or(prefix)(bot, message)
    #you can set a guild/server specific one here
    return commands.when_mentioned_or(prefix)(bot, message)


bot = commands.Bot(command_prefix=get_prefix, case_insensitive=True) #bot allows you to make commands 

然后对于命令,您需要执行以下操作:

@bot.command()
async def whisperroll(ctx):
    await ctx.author.send("some random thing")
于 2020-12-05T11:56:20.853 回答