Random Coffee alternative - random meetings for Telegram chats https://t.me/ranteabot
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

52 lines
1.8 KiB

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'<a href="tg://user?id={person.id}">{person.first_name}</a>'
if person.username:
res += f' (@{person.username})'
return res