import telebot import typing import random import string from telebot.types import Chat def generate_id() -> str: return ''.join(random.choice(string.digits + string.ascii_lowercase) for _ in range(8)) def isint(st: str) -> bool: try: int(st) return True except ValueError: return False def create_inline_button(text: str, callback_data: str) -> telebot.types.InlineKeyboardButton: if callback_data.strip().startswith('https://') or callback_data.startswith('tg://'): return telebot.types.InlineKeyboardButton(text, url=callback_data.strip()) if callback_data.strip().startswith('inline://'): telebot.types.InlineKeyboardButton(text, switch_inline_query_current_chat=callback_data.replace('inline://', '')) if callback_data.strip().startswith('inline_other://'): telebot.types.InlineKeyboardButton(text, switch_inline_query=callback_data.replace('inline_other://', '')) return telebot.types.InlineKeyboardButton(text, callback_data=callback_data) def create_keyboard(rows: typing.Optional[typing.List[typing.List[str]]]): if rows is None: return None is_inline = not isinstance(rows[0][0], str) markup = telebot.types.InlineKeyboardMarkup() if is_inline else telebot.types.ReplyKeyboardMarkup( resize_keyboard=True) for row in rows: if is_inline: markup.row(*( create_inline_button(text, callback_data) for text, callback_data in row )) else: markup.row(*(telebot.types.KeyboardButton(text) for text in row)) return markup def print_user_link(person: Chat): res = f'{person.first_name}' if person.username: res += f' (@{person.username})' return res