如何在 discord.py 中获得命令的主要“功能”?

时间:2021-04-15 19:17:29

标签: discord.py

我正在尝试创建一个命令,该命令在 discord.py 中发送另一个命令的代码。例如,如果我有一个石头剪刀布命令并且我运行了 .code rps,它会发送 rps 命令的代码。到目前为止,这是我的代码:

import inspect 
import discord
from discord.ext.commands import Bot, cooldown, BucketType, CommandOnCooldown
from discord.ext import commands, tasks

@bot.command(hidden=True)
@commands.is_owner()
async def code(ctx, *, command_name):
    """Sends code of a command"""

    com = bot.get_command(command_name)
    if com is None:
        await ctx.reply(f"Bruh that isn't a command", mention_author=False)
    elif com:
        source = inspect.getsource(com)
        try:
            await ctx.reply(f"```\n{source}\n```", mention_author=False)
        except discord.HTTPException:
            await ctx.reply(f"That command's code is too long for me to send lmao", mention_author=False)
            print(source)

但是因为找不到命令类型的源代码而报错

Ignoring exception in command code:
Traceback (most recent call last):
  File "/Users/Bello/PycharmProjects/larry/venv3.8/lib/python3.8/site-packages/discord/ext/commands/core.py", line 85, in wrapped
    ret = await coro(*args, **kwargs)
  File "/Users/Bello/PycharmProjects/larry/venv3.8/test.py", line 351, in code
    source = inspect.getsource(com)
  File "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/inspect.py", line 985, in getsource
    lines, lnum = getsourcelines(object)
  File "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/inspect.py", line 967, in getsourcelines
    lines, lnum = findsource(object)
  File "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/inspect.py", line 780, in findsource
    file = getsourcefile(object)
  File "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/inspect.py", line 696, in getsourcefile
    filename = getfile(object)
  File "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/inspect.py", line 676, in getfile
    raise TypeError('module, class, method, function, traceback, frame, or '
TypeError: module, class, method, function, traceback, frame, or code object was expected, got Command

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
  File "/Users/Bello/PycharmProjects/larry/venv3.8/lib/python3.8/site-packages/discord/ext/commands/bot.py", line 902, in invoke
    await ctx.command.invoke(ctx)
  File "/Users/Bello/PycharmProjects/larry/venv3.8/lib/python3.8/site-packages/discord/ext/commands/core.py", line 864, in invoke
    await injected(*ctx.args, **ctx.kwargs)
  File "/Users/Bello/PycharmProjects/larry/venv3.8/lib/python3.8/site-packages/discord/ext/commands/core.py", line 94, in wrapped
    raise CommandInvokeError(exc) from exc
discord.ext.commands.errors.CommandInvokeError: Command raised an exception: TypeError: module, class, method, function, traceback, frame, or code object was expected, got Command

有没有办法找到命令对象的源代码或找出让我这样做的漏洞?谢谢!!

1 个答案:

答案 0 :(得分:0)

只需使用 exit 1 属性

callback

参考: