Подскажите, почему не работает меню? Веб хуки вроде работают.
import telebot
import time
import os
from telebot import types
from flask import Flask, request
from telebot.types import InlineKeyboardMarkup, InlineKeyboardButton
TOKEN = '5moitoken'
APP_URL = f'https://api.telegram.org/bot5moitoken/{TOKEN}'
bot = telebot.TeleBot(TOKEN)
server = Flask(__name__)
@bot.message_handler(content_types=["text"])
def any_msg(message):
# Создаем клавиатуру и каждую из кнопок (по 2 в ряд)
keyboard = types.InlineKeyboardMarkup(row_width=2)
url_button = types.InlineKeyboardButton(text="URL", url="https://yandex.ru")
callback_button = types.InlineKeyboardButton(text="Callback", callback_data="test")
switch_button = types.InlineKeyboardButton(text="Switch", switch_inline_query="Telegram")
keyboard.add(url_button, callback_button, switch_button)
bot.send_message(message.chat.id, "Я – сообщение из обычного режима", reply_markup=keyboard)
@bot.callback_query_handler(func=lambda call: True)
def callback_inline(call):
# Если сообщение из чата с ботом
if call.message:
if call.data == "test":
bot.edit_message_text(chat_id=call.message.chat.id, message_id=call.message.message_id, text="Текст1")
# Уведомление в верхней части экрана
bot.answer_callback_query(callback_query_id=call.id, show_alert=False, text="Текст1!")
# Если сообщение из инлайн-режима
elif call.inline_message_id:
if call.data == "test":
bot.edit_message_text(inline_message_id=call.inline_message_id, text="Текст2")
@bot.inline_handler(lambda query: len(query.query) > 0)
def query_text(query):
kb = types.InlineKeyboardMarkup()
kb.add(types.InlineKeyboardButton(text="Нажми меня", callback_data="test"))
results = []
# Обратите внимание: вместо текста - объект input_message_content c текстом!
single_msg = types.InlineQueryResultArticle(
id="1", title="Press me",
input_message_content=types.InputTextMessageContent(message_text="Я – сообщение из инлайн-режима"),
reply_markup=kb
)
results.append(single_msg)
bot.answer_inline_query(query.id, results)
'''
@bot.message_handler(func=lambda message: True, content_types=['text'])
def echo(message):
bot.reply_to(message, message.text)
@server.route('/' + TOKEN, methods=['POST'])
def get_message():
json_string = request.get_data().decode('utf-8')
update = telebot.types.Update.de_json(json_string)
bot.process_new_updates([update])
return '!', 200
@server.route('/')
def webhook():
bot.remove_webhook()
bot.set_webhook(url=APP_URL)
return '!', 200
'''
if __name__ == "__main__":
#RUN
#server.run(host='0.0.0.0', port=int(os.environ.get('PORT', 5000)))
bot.polling(none_stop=True)
Если убираю код вебхуков, меню работает.
TOKEN = '5moitoken'
APP_URL = f'https://api.telegram.org/bot5moitoken/{TOKEN}'
bot = telebot.TeleBot(TOKEN)
server = Flask(__name__)
@bot.message_handler(func=lambda message: True, content_types=['text'])
def echo(message):
bot.reply_to(message, message.text)
@server.route('/' + TOKEN, methods=['POST'])
def get_message():
json_string = request.get_data().decode('utf-8')
update = telebot.types.Update.de_json(json_string)
bot.process_new_updates([update])
return '!', 200
@server.route('/')
def webhook():
bot.remove_webhook()
bot.set_webhook(url=APP_URL)
return '!', 200
И этот код
server.run(host='0.0.0.0', port=int(os.environ.get('PORT', 5000)))
Меняю подключение к токену
Это все удаляю
TOKEN = '5moitoken'
APP_URL = f'https://api.telegram.org/bot5moitoken/{TOKEN}'
bot = telebot.TeleBot(TOKEN)
server = Flask(__name__)
И меняю на этот код
bot = telebot.TeleBot("moy_token")
И тогда, все работает.
Как сделать так, чтобы в одном файле, вебхуки, меню и все работало, или нужно вебхуки в отдельном файле? И как, это тогда все прописать?