如何将命令作为函数调用
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 say
和 from bot import say
。以上是关于如何将命令作为函数调用的主要内容,如果未能解决你的问题,请参考以下文章
如何将 JS 函数的引用作为参数传递给 ExternalInterface 调用?