【问题标题】:How to call a command as a function如何将命令作为函数调用
【发布时间】:2020-01-15 09:26:48
【问题描述】:

我正在尝试为我的不和谐服务器制作一个验证机器人(并且为了好玩)。我注意到我不能将命令作为函数调用。我已经为函数所在的单个 python 文件做了一个解决方案。但是当我想在单独的 python 文件中调用 say 命令时它不起作用。

或者:如何在常规函数中使用channel.send()

代码:

async def say_c(message, channel_id):
    await bot.wait_until_ready()

    channel = bot.get_channel(channel_id)

    await channel.send(message)

def say(*args, channel_id):
    message = ""

    for word in args:
        message = message + word + " "

    bot.loop.create_task(say_c(message, channel_id))

注意: say_c 是在 discord 服务器上放一些东西的那个,但 say 是我在文件中调用的函数。这有效,但不适用于单独的 python 文件。

【问题讨论】:

    标签: python function command discord discord.py-rewrite


    【解决方案1】:

    为了能够从其他“文件”(通常称为module)使用它,它们需要在同一个工作区中,也就是说,它们必须在同一个文件夹中(还有其他可能的设置为好吧,但这超出了这个问题的范围)。

    my_discord_bot/
    ├── discord_bot.py
    ├── other.py
    

    假设您在discord_bot.py 中有上面发布的代码。 为了能够从other.py 调用它,您需要将类似这样的内容放入您的other.py 文件中:

    from discord_bot import say
    
    say('hello')
    

    【讨论】:

    • 您好!谢谢你的回答,但这是我一直在做的,但没有用
    • 你能解释一下你是如何执行你的代码的吗?当您尝试调用它时会收到什么错误消息/异常?
    • 它没有显示错误,它只是没有运行该功能。好吧,我使用了 2 个函数,say function 是我在不同的 python 文件中调用的函数,say_c function 是对不和谐服务器说些什么的函数,我用循环调用 say_c function。 create_task,看看我的代码,也许它更有意义。出于某种奇怪的原因,say 函数只在它定义的地方起作用,我像导入函数一样导入 say 命令。
    • 这个“不同的python文件”如何导入你的say函数?您应该将代码上传到 github 或 repl.it (repl.it/languages/python3),因为没有错误消息是没有意义的。
    • 抱歉,ping 迟了,我是这样导入的 import sayfrom bot import say
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-08-11
    • 1970-01-01
    • 2015-06-23
    • 1970-01-01
    • 2015-06-26
    • 2018-06-09
    • 2021-05-12
    相关资源
    最近更新 更多