DM命令不和谐机器人

Posted

技术标签:

【中文标题】DM命令不和谐机器人【英文标题】:DM commands to discord bot 【发布时间】:2018-07-21 22:22:00 【问题描述】:

我最近有了 DMing 我的机器人命令的想法。例如,一个命令可以让我从该机器人所在的每个服务器中解禁。

不幸的是,我没有任何命令的起点,因为我什至不确定 DMing 命令是否可行。

discord.pycommandDM 等关键字在 Google 中非常常见,因此很难找到有关该主题的任何好信息。

我正在寻找一种方法让机器人接收 DM 作为命令并只接受我的命令(如果有人想共享任何代码,我的 ID 存储在变量 ownerID 中)。

虽然我主要在寻找上述内容,但 DM unban 命令的一些代码也会很有帮助。

编辑:我被要求展示一些来自我的机器人的示例代码。这是命令number 的代码,它生成一个随机数并在消息中发送它。我希望这能让您了解我的机器人是如何制作的:

@BSL.command(pass_context = True)
async def number(ctx, minInt, maxInt):
    if ctx.message.author.server_permissions.send_messages or ctx.message.author.id == ownerID:
        maxInt = int(maxInt)
        minInt = int(minInt)
        randomInt = random.randint(minInt, maxInt)
        randomInt = str(randomInt)
        await BSL.send_message(ctx.message.channel, 'Your random number is: ' + randomInt)
    else:
        await BSL.send_message(ctx.message.channel, 'Sorry, you do not have the permissions to do that @!'.format(ctx.message.author))

【问题讨论】:

您尚未发布任何当前代码。您希望如何获得帮助。根据您编写机器人的方式,接受 dms 作为命令会有所不同。 确实如此。对于那个很抱歉。我会尽快从我的机器人中添加一些示例代码。 【参考方案1】:

您可以在私人消息中发送命令。类似的东西

@BSL.command(pass_context=True)
async def unban(ctx):
    if ctx.message.channel.is_private and ctx.message.author.id == ownerID:
        owner = await BSL.get_user_info(ownerID)
        await BSL.say('Ok , unbanning you.'.format(owner.name))
        for server in BSL.servers:
            try:
                await BSL.unban(server, owner) # I think having the same name should be fine.  If you see weird errors this may be why.
                await BSL.say('Unbanned from '.format(server.name))
            except discord.HTTPException as e:
                await BSL.say('Unbanning failed in  because\n'.format(server.name, e.text))
            except discord.Forbidden:
                await BSL.say('Forbidden to unban in '.format(server.name))
    else:
        if ctx.message.author.id != ownerID:
            await BSL.say('You are not my owner')
        if not ctx.message.channel.is_private:
            await BSL.say('This is a public channel')

应该可以。我不确定如果您尝试解禁未被禁止的用户会发生什么,这可能会引发HTTPException

【讨论】:

这似乎不起作用。没有错误消息或输出不和谐。 @user9123 我可以让它告诉我,我的机器人无法解禁人。您如何保存您的ownerid?我认为ctx.message.author.id 是一个字符串。 我只是将它保存为ownerID = '34481235886840217',这确实是一个字符串。该变量有一个大写的 I 和 D,但是当我将它粘贴到我的机器人时,我在你的代码中更改了它们。 @user9123 我添加了一条响应,表明该命令是在私人频道中从所有者那里收到的。试试更新的代码,它至少应该告诉我们问题出在哪里。 你问的那个here?只需将条件更改为if message.channel in silent_channels and not message.channel.is_private:

以上是关于DM命令不和谐机器人的主要内容,如果未能解决你的问题,请参考以下文章

无论我尝试啥,我的不和谐机器人自然会阻止 DM 选项

不和谐机器人中的命令问题

有啥方法可以更改 DM 名称?不和谐 js 12

我怎样才能制作一个不和谐的机器人,当他们加入服务器时,他们会 DM 新用户?

如何让我的不和谐机器人只在聊天中工作?

如何让 Discord 机器人向我 ping 的人发送 DM?