Discord.py如何让机器人不响应PM

时间:2018-01-30 09:44:09

标签: python python-3.x discord discord.py

正如标题所要求的那样,机器人有没有办法在PM中工作,只能在频道中使用?

我目前所做的是在@ client.command前面发表此声明

parseString

有更简单的方法可以做到这一点吗?我已经读过,我可以使用全局检查,但我不确定如何实现它。

编辑:我正在使用@client.command(pass_context=True) async def profile(ctx): if ctx.message.server == None: pass else: # Code

对此进行编码

3 个答案:

答案 0 :(得分:3)

我可以看到documentation中没有任何内容可以说明全局禁用私信的事件。

你完成它的方式正是我所做的。你说你不想每次都重复这行,但你只能有一个on_message(),所以这行只需要出现一次;每个需要遵守这些规则的命令都只在if块中:

@client.event
async def on_message(message):
    if message.server is not None:
        if message.content.startswith('!dice'):
            ...

        if message.content.startswith('!roulette'):
            ...

编辑:您似乎正在使用commands扩展程序,该扩展程序几乎没有记录。

阅读Command的文档字符串,但我遇到了this部分:

no_pm : bool
    If ``True``\, then the command is not allowed to be executed in
    private messages. Defaults to ``False``. Note that if it is executed
    in private messages, then :func:`on_command_error` and local error handlers
    are called with the :exc:`NoPrivateMessage` error.

因此,如果您将命令定义为:

@client.command(pass_context=True, no_pm=True)
async def profile(ctx):
    ...

它将在PM中禁用。

答案 1 :(得分:0)

no_pm = true现在似乎不起作用。 因此,请在@ client.command()下面添加“ @ commands.guild_only()”

示例:

@client.command()
@commands.guild_only()
async def commandname():

答案 2 :(得分:0)

如果要使用@bot.event进行编码,则必须这样做:

@bot.event
async def on_message(message):
    if message.content.startswith('!dm')
        await message.author.send('Hi. This message is send in DM!')