前缀和非前缀命令在 python discord bot 上不能一起工作
Posted
技术标签:
【中文标题】前缀和非前缀命令在 python discord bot 上不能一起工作【英文标题】:Prefixed and non prefix commands are not working together on python discord bot 【发布时间】:2018-05-16 14:04:33 【问题描述】:import asyncio
import discord
from discord.ext import commands
from discord.ext.commands import Bot
import chalk
bot = commands.Bot(command_prefix='!')
@bot.event
async def on_ready():
await bot.change_presence(game=discord.Game(name='Test'))
print("All systems online and working " + bot.user.name)
await bot.send_message(discord.Object(id=386518608550952965), "All systems online and working")
@bot.command(pass_context=True)
async def hel(ctx):
await bot.say("A help message is sent to user")
@bot.command
async def on_message(message):
if message.content.startswith("ping"):
await bot.send_message(message.channel, "Pong")
bot.run("TOKEN", bot=True)
我试图在我的 discord 测试服务器上完成这项工作,但是当我像这样使用它时,只有第一个“on_ready”和 !hel 命令有效,ping 不打印任何内容,但是当我删除 !hel命令代码部分,ping 有效,有什么方法可以让它们一起工作吗?
【问题讨论】:
在hel
中,sot.say
应该是bot.say
吗?
啊,是的,我只是没有意识到,我在这里将常规名称更改为“bot”,使其看起来更简单,并且打错了。在我的原始代码中是正确的
【参考方案1】:
使用on_message
时将@bot.command
更改为@bot.event
使用on_message
时添加bot.process_commands
为什么 on_message 会让我的命令停止工作?
覆盖默认提供的 on_message 会禁止运行任何额外的命令。要解决此问题,请在 on_message 末尾添加 bot.process_commands(message) 行。例如:
@bot.event async def on_message(message): # do some extra stuff here await bot.process_commands(message)
http://discordpy.readthedocs.io/en/latest/faq.html#why-does-on-message-make-my-commands-stop-working
您的代码应如下所示:
import asyncio
import discord
from discord.ext import commands
from discord.ext.commands import Bot
import chalk
bot = commands.Bot(command_prefix='!')
@bot.event
async def on_ready():
await bot.change_presence(game=discord.Game(name='Test'))
print("All systems online and working " + bot.user.name)
await bot.send_message(discord.Object(id=386518608550952965), "All systems online and working")
@bot.command(pass_context=True)
async def hel(ctx):
await bot.say("A help message is sent to user")
@bot.event
async def on_message(message):
if message.content.startswith("ping"):
await bot.send_message(message.channel, "Pong")
await bot.process_commands(message)
bot.run("TOKEN", bot=True)
【讨论】:
【参考方案2】:尝试用@bot.event
替换上面的on_message
@bot.command
【讨论】:
以上是关于前缀和非前缀命令在 python discord bot 上不能一起工作的主要内容,如果未能解决你的问题,请参考以下文章