gpt4 book ai didi

python - 如何将变量或对象传递给 aiogram dp.message_handler 装饰函数?

转载 作者:行者123 更新时间:2023-12-02 02:18:03 25 4
gpt4 key购买 nike

我正在尝试使用 aiogram 构建聊天机器人,但发现该包提供的示例没有帮助。问题是我找不到将我自己的对象或变量从 main 传递到由 'dp.message_handler()' 装饰的聊天函数的方法。我需要将文本生成器的对象和变量传递给聊天功能,这样机器人就可以聊天而不仅仅是回显。我使用他们的 echo 示例作为起点,我可以在 'message.text' 处获取用户消息,没问题...我的代码如下:

    @dp.message_handler()
async def chat(message: types.Message, myobj, myvar):
"using myobj and myvar to generate text as reply"
await message.answer(reply)
return message.text

async def main():
while Ture:
said = await partial(chat, myobj=qna_model, myvar=text)
if said == "bye": break
dp.stop_polling()
await dp.wait_closed()
await bot.session.close()

if __name__ == '__main__':
executor.start_polling(dp, skip_updates=True)
asyncio.run(main())

但我收到错误:TypeError:chat() 缺少 2 个必需的位置参数:“myobj”和“myvar”。我什至尝试了 'async def chat(message: types.Message, **kwargs)' 并从 main() 调用它,没有部分包装,也没有运气......我搜索并找不到有关如何使用 aiogram 构建聊天机器人的示例,可能是我使用 aiogram 的方式错误...有人成功使用 aiogram 构建聊天机器人吗?

最佳答案

如果您想将函数传递给处理程序,只需导入它并直接使用它即可。如果您想将其应用于某些处理程序,您应该使用中间件。

直接使用

def generate_text():
return "generated text"

async def handler(message: Message):
text = generate_text()
await message.answer(text)

中间件使用

创建中间件
from aiogram.dispatcher.middlewares import BaseMiddleware
from aiogram.types import Message

class YourMiddleware(BaseMiddleware):
async def on_pre_process_message(self, message: Message, data: dict):
# `text` is a name of var passed to handler
data["text"] = generate_text()
通过调度程序(on_startup)注册它
dp.middleware.setup(YourMiddleware())
在处理程序中获取 text 数据
from aiogram.types import Message

async def handler(message: Message, text: str):
await message.answer(text)

关于python - 如何将变量或对象传递给 aiogram dp.message_handler 装饰函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66884716/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com