正如标题所要求的那样,机器人有没有办法在PM中工作,只能在频道中使用?
我目前所做的是在@ client.command前面发表此声明
parseString
有更简单的方法可以做到这一点吗?我已经读过,我可以使用全局检查,但我不确定如何实现它。
编辑:我正在使用@client.command(pass_context=True)
async def profile(ctx):
if ctx.message.server == None:
pass
else:
# Code
答案 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!')