Ami*_*ani 3 python python-telegram-bot
我正在尝试编写一个机器人,用户单击命令,将链接作为消息发送,然后机器人将链接添加到某个数据库。这是它的外观:
所以我认为我应该使用ConversationHandler. 这是我写的bot.py:
from telegram.ext import (Updater, CommandHandler, MessageHandler, Filters,
ConversationHandler)
from settings import BOT_TOKEN
import commands
def main():
updater = Updater(BOT_TOKEN, use_context=True)
dispatcher = updater.dispatcher
conversation = ConversationHandler(
entry_points=[
MessageHandler(
(Filters.command & Filters.regex("al_(.*)")),
commands.add_link
)
],
states={
commands.ADD_LINK: [
MessageHandler(Filters.entity("url"), commands.receive_link)
]
},
fallbacks=[]
)
dispatcher.add_handler(CommandHandler("search", commands.search))
dispatcher.add_handler(conversation)
updater.start_polling()
updater.idle()
if __name__ == "__main__":
main()
Run Code Online (Sandbox Code Playgroud)
命令在另一个名为的文件中commands.py:
from telegram.ext import ConversationHandler
ADD_LINK = range(1)
def receive_link(update, context):
bot = context.bot
url = update.message.text
chat_id = update.message.chat.id
bot.send_message(
chat_id=chat_id,
text="The link has been added."
)
return ConversationHandler.END
def add_link(update, context):
bot = context.bot
uuid = update.message.text.replace("/al_", "")
chat_id = update.message.chat.id
bot.send_message(
chat_id=chat_id,
text="Send the link as a message."
)
return ADD_LINK
Run Code Online (Sandbox Code Playgroud)
现在的问题是我需要能够在我的函数中使用uuid变量(在 中生成add_link)receive_link。但我不知道如何传递这个变量。我该怎么做?
在这篇文章的帮助下,我是这样解决的。
通过
context.user_data在任何处理程序回调中使用,您可以访问特定于用户的字典。
所以我的代码会改变如下:
from telegram.ext import ConversationHandler
ADD_LINK = range(1)
def receive_link(update, context):
bot = context.bot
url = update.message.text
chat_id = update.message.chat.id
uuid = context.user_data["uuid"]
bot.send_message(
chat_id=chat_id,
text=f"The link has been added to '{uuid}'."
)
return ConversationHandler.END
def add_link(update, context):
bot = context.bot
uuid = update.message.text.replace("/al_", "")
context.user_data["uuid"] = uuid
chat_id = update.message.chat.id
bot.send_message(
chat_id=chat_id,
text=f"Send the link as a message."
)
return ADD_LINK
Run Code Online (Sandbox Code Playgroud)
我这样存储uuid变量:
context.user_data["uuid"] = uuid
Run Code Online (Sandbox Code Playgroud)
并像这样使用它:
uuid = context.user_data["uuid"]
Run Code Online (Sandbox Code Playgroud)
非常简单直观。这是输出:
| 归档时间: |
|
| 查看次数: |
3590 次 |
| 最近记录: |