【问题标题】:Why does telepot send two message instead one?为什么 Telepot 发送两条消息而不是一条?
【发布时间】:2020-08-04 12:15:08
【问题描述】:

我有一个问题,当 Telepot 发送第二条消息时(按下 'reply_markup=keyboard_selection' 后),telepot 也发送第一条消息 'bot.sendMessage(chat_id, text = "Cosa desideri fare?", reply_markup=keyboard_selection )'

import time
import telepot
from telepot.loop import MessageLoop
import telepot.namedtuple
bot = telepot.Bot("1210935912:AAG4X8vHlXLM3jQWnxFKDB2NsZ6pqTQM7lQ")
lista = ["New York","Los Angeles","Miami","Toronto","Berlin","Rome","Ciao"]
seq = iter(lista)
#reqloc = keyboard = {"text": "Utilizza la geolocalizzazione", "request_location": True}  Update Beta 1.01
#keyboard = {"keyboard": [[reqloc]]+[[{"text": i} for i in pair] for pair in zip(seq)]}
keyboard_locpo = {"keyboard": [[{"text": i} for i in pair] for pair in zip(seq)]}
keyboard_selection = {"keyboard": [[{"text": "Cerca fermata ora"}],
                                   [{"text": "Pianififca Viaggio"}]]}


def handle(msg):
    content_type, chat_type, chat_id = telepot.glance(msg)
    bot.sendMessage(chat_id, text = "Cosa desideri fare?", reply_markup=keyboard_selection)
    text = msg['text']
    if text == "Cerca fermata ora":
        bot.sendMessage(chat_id, text = "Cosa", reply_markup=keyboard_selection)

【问题讨论】:

  • 您永远不应该在问题中包含您的机器人令牌。Time to regenerate it!但是看到您每次调用handle 时都调用sendMessage,因此每次都会包含该消息。您可能希望在发送Cosa desideri fare? 消息之前检查text
  • 谢谢,我会更改我的机器人令牌,我忘记了。是的,要检查文本。
  • 那么,我该如何解决我的问题?
  • 在发送第一条消息之前移动 text 比较,并且仅在文本与第二步所需的文本不匹配时才发送消息。

标签: python telegram telepot


【解决方案1】:

我想一个简单的解决方法是:

def handle(msg):
    content_type, chat_type, chat_id = telepot.glance(msg)
    text = msg['text']
    if text == "Cerca fermata ora":
        bot.sendMessage(chat_id, text = "Cosa", reply_markup=keyboard_selection)
    else:
        bot.sendMessage(chat_id, text = "Cosa desideri fare?", reply_markup=keyboard_selection)

此外,如果您想以一种非常有序的方式进行操作,我建议您使用InlineKeyboardMarkup。有了它, inline 关键字的答案将转到您定义的回调函数,在那里您只会获得用户按下的文本。

您的数据示例如下:

import time
import telepot
from telepot.loop import MessageLoop
import telepot.namedtuple
bot = telepot.Bot("1210935912:AAG4X8vHlXLM3jQWnxFKDB2NsZ6pqTQM7lQ")
lista = ["New York","Los Angeles","Miami","Toronto","Berlin","Rome","Ciao"]
seq = iter(lista)

keyboard = InlineKeyboardMarkup(inline_keyboard=[
                                [InlineKeyboardButton(text='Cerca fermata ora', callback_data='cerca')],
                                [InlineKeyboardButton(text='Pianififca Viaggio', callback_data='planifica')]
                                                ]
                                )
def handle(msg):
    content_type, chat_type, chat_id = telepot.glance(msg)
    bot.sendMessage(chat_id, text = "Cosa desideri fare?", reply_markup=keyboard)

def on_callback_query(msg):        
    query_id, chat_id, query_data = telepot.glance(msg, flavor='callback_query')

    if query_data == "cerca":
        bot.sendMessage(chat_id, text = "Cosa cerca", parse_mode='markdown')
    if query_data == "planifica":
        bot.sendMessage(chat_id, text = "Cosa planifica", parse_mode='markdown')

MessageLoop(bot, {'chat' : handle,
                  'callback_query' : on_callback_query}).run_as_thread()

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-16
    • 2020-05-13
    • 2016-04-25
    • 1970-01-01
    相关资源
    最近更新 更多