У меня есть бот в Telegram, и я использую библиотеку Telebot на Python для его разработки. У меня возникла интересная ситуация, которая требует вашей помощи.
Моя цель:
- Пользователь нажимает на кнопку "Zeptat se✏️".
- Бот должен предоставить пользователю возможность задать вопрос менеджеру.
- Если пользователь нажимает на другую кнопку (например, "Platba ") после того, как нажал "Zeptat se✏️" и не написал вопрос, то бот не должен отправлять сообщение в группу, но и кнопки должны продолжать работать.
Проблема:
В настоящий момент, если пользователь нажимает "Zeptat se✏️", а затем нажимает другую кнопку, сообщение кнопки отправляется в группу, и программа считывает это как сообщение, и это не должно происходить.
Я не уверен, как правильно реализовать такое поведение в моем коде. Может кто-то подскажет, как это можно сделать? Желательно скинуть код, либо просто пояснить).
Вот вот мой:
import telebot
from telebot import types
token = '' # ваш TOKEN бота
TO_CHAT_ID = '' # ваш CHAT ID
bot = telebot.TeleBot(token, parse_mode=None)
# Создаем клавиатуру
keyboard = types.ReplyKeyboardMarkup(resize_keyboard=True, row_width=2)
btn1 = types.KeyboardButton('Platba ')
btn2 = types.KeyboardButton('Více s soukromé komunitě')
btn3 = types.KeyboardButton('Zeptat se✏️')
keyboard.add(btn1, btn2, btn3)
# Создаем inline клавиатуру
inline_keyboard = types.InlineKeyboardMarkup(row_width=2)
inline_btn1 = types.InlineKeyboardButton('Zaplatit', callback_data='button1')
inline_keyboard.add(inline_btn1)
# Inline support keyboard
inline_keyboard_support = types.InlineKeyboardMarkup(row_width=2)
inline_btn1_support = types.InlineKeyboardButton('Mám problém', callback_data='button2')
inline_keyboard_support.add(inline_btn1_support)
@bot.message_handler(commands=['start'])
def send_welcome(message):
# Отправляем приветственное сообщение и клавиатуру
bot.send_message(message.chat.id, "Zdravím \nTento bot ti pomůže dostat se do soukromé komunity Sigma Grindset Club CZ/SK \n\nCena: 15 euro.\nZrušit měsíční předplatné můžeš kdykoliv", reply_markup=keyboard)
@bot.message_handler(content_types=['text'])
def handle_text(message, res = False):
if message.text == 'Platba ':
# Обработка нажатия на кнопку "Platba "
bot.send_message(message.chat.id, text=f"Platba v jakékoli měně, odkudkoli na světě, jakoukoliv kartou✌️", reply_markup=inline_keyboard)
if message.text == 'Více s soukromé komunitě':
bot.send_message(message.chat.id, text="-Hlavní soukromá mužská komunita Česka a Slovenska\n\n✅Tvoje záchrana od systému, který se tě snaží oslabit a zabít v tobě tvoje mužské JÁ. Přijmi realitu a pohybuj se s náma dál.\n✅Hlavní hodnotou této komunity je BRATRSTVÍ. To znamená být obklopen stejně zamotivovanými muži, kteří se rozhodli to v životě někam dotáhnout a chtějí na sobě makat. Jsme tým, spolu jsme silnější, navzájem se nabíjíme energií a motivujeme se.\n✅Tipy a rady o mužském zdraví/životě, a také informace o hormonech a biohackerských doplňcích stravy, které zlepší tvůj život a pomůžou ti na tvé cestě.\n✅Denní dávka motivace na sobě makat\n✅Diskuze o psychologii muže, vztahy s ženami, dnešní date market atd.\nKomunita pro silného a uvažujícího muže.\n\nPředplatné je měsíční, zrušit ho můžeš kdykoliv✌️\n\nVítej k nám! ")
if message.text == 'Zeptat se✏️':
markup = types.InlineKeyboardMarkup()
button1 = types.InlineKeyboardButton(text='Zeptat se', callback_data='go')
markup.add(button1)
bot.send_message(message.chat.id, 'Chceš se na něco zeptát? Klikni na tlačítko níže. Náš manager se s tebou spojí a zodpoví na tvůj dotaz.', reply_markup=markup)
# Получение сообщений от юзера,
if int(message.chat.id) == int(TO_CHAT_ID):
bot.send_message(help_user_id, message.text)
# Функция, отправляющая вопрос от пользователя в чат поддержки
def helpBot(message):
bot.forward_message(TO_CHAT_ID, message.chat.id, message.message_id)
# Обработка inline-кнопок
@bot.callback_query_handler(func=lambda call: True)
def callback_inline(call):
try:
global help_user_id
help_user_id = call.message.from_user.id
if call.message:
if call.data == 'button1':
bot.send_message(call.message.chat.id, 'Platba kartou v jakékoli měně:\n\n[✅Klikni na odkaz](https://t.me/+azOZuNQUS0cxYWM0)\n\n@donate přijme platbu a automaticky tě přidá do skupiny\n\n⚠️Problémy s botem/platbou? — Klikni na tlačítko «Mám problém» . Náš manager se s tebou spojí a pomůže ti problém vyřešit', parse_mode='Markdown', reply_markup=inline_keyboard_support)
if call.data == 'button2':
help_user_id = call.message.chat.id
# Получить информацию о чате пользователя
chat_info = bot.get_chat(help_user_id)
chat_link = f"https://t.me/{chat_info.username}" # Получаем ссылку на личку пользователя
# Отправить уведомление в группу о проблеме и ссылку на личку
bot.send_message(TO_CHAT_ID, f"Пользователь имеет проблему с оплатой. {chat_link}")
# Отправить сообщение пользователю в его личку
bot.send_message(help_user_id, "Náš manažer tě bude brzy kontaktovat ")
if call.data == 'go':
help_user_id = call.message.chat.id
# Получить информацию о чате пользователя
chat_info = bot.get_chat(help_user_id)
chat_link = f"https://t.me/{chat_info.username}" # Получаем ссылку на личку пользователя
# Отправить уведомление в группу о проблеме и ссылку на личку
bot.send_message(TO_CHAT_ID, f"Пользователь имеет проблему с ботом, вскоре он напишет вам сообщение, ожидайте... {chat_link}")
# Отправить сообщение пользователю в его личку
msg = bot.send_message(help_user_id, "Náš manažer tě bude brzy kontaktovat ")
bot.register_next_step_handler(msg, helpBot)
except Exception as e:
print(repr(e))
bot.infinity_polling(skip_pending=True)
Участок кода который отвечает за отправку сообщений в группу:
@bot.callback_query_handler(func=lambda call: True)
def callback_inline(call):
try:
global help_user_id
help_user_id = call.message.from_user.id
if call.message:
if call.data == 'button1':
bot.send_message(call.message.chat.id, 'Platba kartou v jakékoli měně:\n\n[✅Klikni na odkaz](https://t.me/+azOZuNQUS0cxYWM0)\n\n@donate přijme platbu a automaticky tě přidá do skupiny\n\n⚠️Problémy s botem/platbou? — Klikni na tlačítko «Mám problém» . Náš manager se s tebou spojí a pomůže ti problém vyřešit', parse_mode='Markdown', reply_markup=inline_keyboard_support)
if call.data == 'button2':
help_user_id = call.message.chat.id
# Получить информацию о чате пользователя
chat_info = bot.get_chat(help_user_id)
chat_link = f"https://t.me/{chat_info.username}" # Получаем ссылку на личку пользователя
# Отправить уведомление в группу о проблеме и ссылку на личку
bot.send_message(TO_CHAT_ID, f"Пользователь имеет проблему с оплатой. {chat_link}")
# Отправить сообщение пользователю в его личку
bot.send_message(help_user_id, "Náš manažer tě bude brzy kontaktovat ")
if call.data == 'go':
help_user_id = call.message.chat.id
# Получить информацию о чате пользователя
chat_info = bot.get_chat(help_user_id)
chat_link = f"https://t.me/{chat_info.username}" # Получаем ссылку на личку пользователя
# Отправить уведомление в группу о проблеме и ссылку на личку
bot.send_message(TO_CHAT_ID, f"Пользователь имеет проблему с ботом, вскоре он напишет вам сообщение, ожидайте... {chat_link}")
# Отправить сообщение пользователю в его личку
msg = bot.send_message(help_user_id, "Náš manažer tě bude brzy kontaktovat ")
bot.register_next_step_handler(msg, helpBot)