我有一个Discord Bot,我试图通过跟踪命令用法来跟踪该机器人的用法。我的代码如下。我遇到了似乎无法获得命令名称的问题。 这是代码:
@commands.Cog.listener(name='on_command')
async def print(self, ctx, command):
server = ctx.guild.name
user = command.author
command = ctx.command
print(f'{server} > {user} > {command}')
运行命令(任何命令)时,它说“缺少必需的arg'命令'”,我也尝试了其他代码。我尝试过的其他代码:
@commands.Cog.listener(name='on_command')
async def print(self, command, server=None, user=None):
server = command.guild.name
user = command.author
print(f'{server} > {user} > {command}')
这只会发送命令以外的所有内容。代替该命令的是发送一个看起来像十六进制代码的东西(0x____)。我想念什么?我可以尝试什么?
答案 0 :(得分:0)
运行命令(任何命令)时,它说“缺少必需的arg'命令'”
您会收到此错误,因为API documentation for on_command指出它只有1个参数,即ctx
,因此Discord将从不传递任何其他信息给您,因此您的command
参数将始终丢失。
Context
的文档说,您可以使用ctx.command
来获取命令。
@commands.Cog.listener(name='on_command')
async def print(self, ctx):
server = ctx.guild.name
user = ctx.author
command = ctx.command
print(f'{server} > {user} > {command}')
在命令的位置发送一个看起来像十六进制代码的东西(0x ____)
这是Context
实例的字符串表示形式。因为您只发送command
,却对此不做任何事情,并且看到它实际上是Context
,而不是如上所述的Command
,所以这就是结果。
答案 1 :(得分:0)
我想要类似的东西,并通过反复试验得到了这个,其中 msg_dump_channel 是您想要将输出打印到的频道的 ID。
from discord.ext import commands
bot = commands.Bot(command_prefix = '>')
@bot.event
async def on_command(ctx):
channel = bot.get_channel(msg_dump_channel)
server = ctx.guild.name
user = ctx.author
command = ctx.command
await channel.send('{} used {} in {}'.format(user, command, server))