Discord Bot命令日志

时间:2020-10-25 08:46:54

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

我有一个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____)。我想念什么?我可以尝试什么?

2 个答案:

答案 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))