我需要帮助用 Python 为我的 Telegram 机器人编写代码。我有一个 config.py 文件,其中包含两个关键字列表:keywords 和 button_phrases。
keywords - 负责在单击时显示子按钮的按钮。 Button_phrases - 负责单击时打开链接的按钮。
我需要机器人检查用户输入的文本并按以下顺序查找关键字:
检查关键字中是否存在关键字。 检查button_phrases 中是否存在关键字。 get_matching_keywords 函数应该执行特定任务:检查单个消息中是否存在关键字。在我们的例子中,该函数应使用两个循环,当找到关键字并发送适当的按钮时,这两个循环将关闭。
循环应按如下方式工作:
检查关键字中是否存在关键字。如果找到,则添加按钮并退出循环。 检查button_phrases 中是否存在关键字。如果找到,则添加按钮并退出循环。 如果文本包含两个列表中的关键字(关键字和按钮短语),则机器人应一起发送相应的按钮。
如果有任何可以帮助实现此逻辑的建议或示例代码,我将不胜感激。谢谢!
我编写了一个检查关键字的函数,但我不确定如何正确构建循环以确保检查两个列表并发送适当的按钮。
import telebot
from telebot import types
from config import keywords, button_phrases
bot = telebot.TeleBot("YOUR_TELEGRAM_BOT_TOKEN")
def get_matching_keywords(message):
"""
检查单个消息中是否存在关键字和按钮短语,并返回匹配的按钮。
Args:
message: Telegram 消息对象。
Returns:
匹配的按钮列表,如果没有匹配则为空列表。
"""
matched_buttons = []
message_text = message.text.lower()
# 首先检查关键字
for keyword in keywords:
if keyword.lower() in message_text:
# 为关键字创建 InlineKeyboardButton
button = types.InlineKeyboardButton(keyword, callback_data=f"keyword_{keyword}")
matched_buttons.append(button)
# 如果找到关键字,则退出关键字循环
break
# 然后检查按钮短语
for phrase in button_phrases:
if phrase.lower() in message_text:
# 为短语创建 InlineKeyboardButton
button = types.InlineKeyboardButton(phrase, url=button_phrases[phrase])
matched_buttons.append(button)
# 如果找到短语,则退出短语循环
break
return matched_buttons
@bot.message_handler(func=lambda message: True)
def handle_message(message):
"""
处理传入的消息并发送匹配的按钮。
"""
matched_buttons = get_matching_keywords(message)
if matched_buttons:
# 创建键盘并将按钮添加到其中
keyboard = types.InlineKeyboardMarkup()
for button in matched_buttons:
keyboard.add(button)
# 发送包含按钮的消息
bot.send_message(message.chat.id, "我找到了这些按钮:", reply_markup=keyboard)
else:
bot.send_message(message.chat.id, "在的消息中找不到任何匹配的关键字或短语。")
# 启动机器人
bot.polling()
说明:
- 导入必要的库:
-
telebot
:用于与 Telegram Bot API 交互。 -
types
:用于创建不同类型的消息内容,例如内联键盘按钮。 -
config
:创建的配置文件,其中包含keywords
和button_phrases
列表。 -
初始化机器人:
-
使用的 Telegram 机器人令牌替换
"YOUR_TELEGRAM_BOT_TOKEN"
。 -
get_matching_keywords
函数: - 此函数接受一条消息作为输入。
-
它迭代
keywords
和button_phrases
列表。 -
如果在消息文本中找到关键字或短语,它会创建一个相应的按钮并将其附加到
matched_buttons
列表中。 -
注意: 一旦在每个列表中找到匹配项,循环就会使用
break
语句中断,以确保只为每个列表添加一个按钮。 -
handle_message
函数: -
这是使用
@bot.message_handler
装饰器注册的消息处理程序。它处理所有传入的消息。 -
它调用
get_matching_keywords
函数来获取匹配的按钮列表。 -
如果找到匹配项:
-
它会创建一个
InlineKeyboardMarkup
对象(键盘)。 -
它迭代
matched_buttons
列表,并将每个按钮添加到键盘。 - 它使用找到的按钮发送一条消息。
-
它会创建一个
-
如果没有找到匹配项,它会发送一条消息,告知用户没有找到匹配项。
-
启动机器人:
-
bot.polling()
方法启动机器人并开始侦听传入的更新。
在 config.py 中:
keywords = [
"关键字1",
"关键字2",
"关键字3"
]
button_phrases = {
"按钮短语1": "https://example.com/link1",
"按钮短语2": "https://example.com/link2",
"按钮短语3": "https://example.com/link3"
}
用自己的关键字和按钮短语替换占位符文本及其相应的链接。
此代码演示了如何根据用户消息中的关键字和短语发送内联按钮。可以通过添加更多条件语句和自定义逻辑来根据需要进一步增强此功能。
标签:python,telegram,telegram-bot,python-telegram-bot,py-telegram-bot-api From: 78805942