如何将命令作为函数调用

Posted

技术标签:

【中文标题】如何将命令作为函数调用【英文标题】: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 文件。

【问题讨论】:

【参考方案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

以上是关于如何将命令作为函数调用的主要内容,如果未能解决你的问题,请参考以下文章

如何将 JS 函数的引用作为参数传递给 ExternalInterface 调用?

从 C++ 调用 python 函数时如何将 C++ 类作为参数传递?

调用微风函数时如何将数据绑定值作为参数传递

如何从 shell 脚本调用 GAP 函数?

如何将函数作为道具传递给子组件并在Vue中从那里调用它?

如何在 R 中使用“hclust”作为函数调用