async def desc_task(ctx, channel: discord.TextChannel, *, arg):
import telebot
from telebot import types
import re
items = ['A el', 'B el', 'C el', 'D el']
def generate_markup(pages_count, current_page=0):
markup = types.InlineKeyboardMarkup()
for i in range(pages_count):
markup.add(types.InlineKeyboardButton(i+1, callback_data='page_{}'.format(i)))
btn_back = types.InlineKeyboardButton('Назад', callback_data='page_{}'.format(current_page-1))
btn_forward = types.InlineKeyboardButton('Вперед', callback_data='page_{}'.format(current_page+1))
if current_page == pages_count-1:
markup.add(btn_back)
elif current_page == 0:
markup.add(btn_forward)
else:
markup.row(btn_back, btn_forward)
return markup
@bot.message_handler(commands=['start'])
def send_start(message):
bot.send_message(message.chat.id, items[0], reply_markup=generate_markup(len(items)))
@bot.callback_query_handler(func = lambda call: re.match(r'page_\d+$', call.data))
def callback_query(call):
page = int(re.match(r'page_(\d+)$', call.data).group(1))
bot.edit_message_text(items[page], call.message.chat.id, call.message.message_id, reply_markup=generate_markup(len(items), page))
ничего не работает
row()
добавляет именно строку, сколько передали параметров - столько и будет кнопок в строке (ну, без превышения лимитов телеги конечно)add()
добавляет кнопки, разбивая их на несколько строк по длине row_widthdef test():
return types.InlineKeyboardMarkup(row_width = 2).add(
types.InlineKeyboardButton('test', callback_data=ge_cb.new(action='test1')),
types.InlineKeyboardButton('test' , callback_data=ge_cb.new(action='test2')),
types.InlineKeyboardButton('test', callback_data=ge_cb.new(action='test3')),
types.InlineKeyboardButton('test', callback_data=ge_cb.new(action='test4')))
edit_message_reply_markup
у бота, передав нужные параметры.edit_message_reply_markup(chat_id=None, message_id=None, inline_message_id=None, reply_markup=None):
"""
Use this method to edit only the reply markup of messages.
:param chat_id:
:param message_id:
:param inline_message_id:
:param reply_markup:
:return:
"""
message
, потом уже можно state
вставитьsecret = '43d2yIyIVM'
username = 'user'
bot.remove_webhook()
time.sleep(1)
bot.set_webhook(url='https://{}.pythonanywhere.com/{}'.format(username, secret))
app = Flask(__name__)
@app.route('/{}'.format(secret), methods=["POST"])
def webhook():
bot.process_new_updates([telebot.types.Update.de_json(request.stream.read().decode("utf-8"))])
return 'ok', 200