def menu(message=None, id=None): if not id: id = str(message.chat.id) base = sqlite3.connect('base.db') cursor = base.cursor() right_triangle = u"\U000025B6" left_triangle = u"\U000025C0" schedule_smile = u"\U0001F4DA" notif_set_smile = u"\U0001F514" dd_cal_smile = u"\U0001F4C5" try: buttons = [{ f"{schedule_smile} Мое расписание": "schedule" }, { f"{notif_set_smile} Настройки уведомлений о дедлайнах": "notif_set" }, { f"{dd_cal_smile} Календарь дедлайнов": "deadlines" }] kb_menu = keyboa_maker(items=buttons) group_id = cursor.execute("select group_id from students where id=?", (id, )).fetchall()[0][0] group_name = cursor.execute("select name from groups where id=?", (group_id, )).fetchall()[0][0] bot.send_message( id, f"{right_triangle}{right_triangle}{right_triangle}ГЛАВНОЕ МЕНЮ" f"{left_triangle}{left_triangle}{left_triangle}\n" f"Ты принадлежишь к группе {group_name}\nВыбери один из пунктов меню", reply_markup=kb_menu) except Exception as e: ErrorLog(e)
def change_group(message): global admin_id id = str(message.chat.id) if id != admin_id: buttons = [[{"Да": "changeTrue"}, {"Нет": "changeFalse"}]] kb_menu = keyboa_maker(items=buttons) bot.send_message(chat_id=id, reply_markup=kb_menu, text="Ты уверен, что хочешь изменить группу?")
def set_notif_deadline(id): base = sqlite3.connect('base.db') cursor = base.cursor() try: notif_deadline = cursor.execute( 'select notif_deadline from students where id=?', (id, )).fetchall()[0][0] buttons = [[{ '1 день': 'set_notif_deadline 1' }, { '2 дня': 'set_notif_deadline 2' }, { '3 дня': 'set_notif_deadline 3' }], [{ '4 дня': 'set_notif_deadline 4' }, { '5 дней': 'set_notif_deadline 5' }], [{ '6 дней': 'set_notif_deadline 6' }, { '7 дней': 'set_notif_deadline 7' }], { 'Вернуться в меню': 'menu' }] kb_menu = keyboa_maker(items=buttons) if notif_deadline: if notif_deadline == 1: bot.send_message( id, f'Я напомню о сроках сдачи задания за {notif_deadline} ' f'день до крайнего срока.\nЕсли хочешь изменить, то выбери новое значение', reply_markup=kb_menu) elif notif_deadline in [2, 3, 4]: bot.send_message( id, f'Я напомню о сроках сдачи задания за {notif_deadline} ' f'дня до крайнего срока.\nЕсли хочешь изменить, то выбери новое значение', reply_markup=kb_menu) else: bot.send_message( id, f'Я напомню о сроках сдачи задания за {notif_deadline} ' f'дней до крайнего срока.\nЕсли хочешь изменить, то выбери новое значение', reply_markup=kb_menu) else: bot.send_message( id, 'Выбери, за сколько дней мне напоминать о приближении срока сдачи задания?', reply_markup=kb_menu) except Exception as e: ErrorLog(e)
def start_bot(message): user_kb = types.ReplyKeyboardMarkup(True) user_kb.row('start', 'exit').add() bot.send_message(message.from_user.id, reply_markup=user_kb, text='⛹️♂️⛹️♀️') if message.text == 'start': key = keyboa_maker(items=TEAM_NBA, copy_text_to_callback=True, items_in_row=3) bot.send_message(message.from_user.id, reply_markup=key, text=MSG_GREETING) if message.text == 'exit': keyboard = types.InlineKeyboardMarkup(row_width=1) url_button = types.InlineKeyboardButton(text="URL", url=URL_BR) keyboard.add(url_button) bot.send_message(message.from_user.id, MSG_URL, reply_markup=keyboard)
def AdvGeoCode(message): current_user = user_dict.get(message.chat.id) if current_user is not None: if not chek(message, 'oh c\'mon just answer as if you were normal guy', AdvGeoCode, 'text'): return current_user.city = message.text try: list_txt = "Выберите Свой город из списка пож:" list_cities = keyboa_maker(items=getCoords(current_user.city)) current_user.step = 0 msg = bot.send_message(message.chat.id, list_txt, reply_markup=list_cities) bot.register_next_step_handler(msg, Coords) except ValueError: no_city_txt = 'Похоже, я не могу найти ТАКОЕ \nПопробуй по-другому пож' msg = bot.send_message(message.chat.id, no_city_txt, reply_markup=types.ReplyKeyboardRemove()) bot.register_next_step_handler(msg, AdvGeoCode) else: to_begin(message.chat.id, message.from_user.first_name)
from keyboa import keyboa_maker from fieldnames import color_names colors = [{color: 'color_' + color} for color in color_names + ['ВЫХОД']] keyboard_colors = keyboa_maker(items=colors, copy_text_to_callback=True, items_in_row=3) occupations = [{ 'Школьник': 'occupation_kid' }, { 'Студент': 'occupation_student' }, { 'Работаю': 'occupation_worker' }, { 'Пенсионер': 'occupation_retiree' }, { 'Что-то еще': 'occupation_unknown' }] keyboard_occupations = keyboa_maker(items=occupations) answers = [{ 'Ответить сейчас': 'answer_now' }, { 'Ответить позже': 'answer_later' }, { 'Игнорировать': 'answer_never' }] keyboard_answers = keyboa_maker(items=answers) personal_info = [{
def create_keyboard(arr, flag=''): # генерация кнопок из списка типа [['txt', 'id']....] return keyboa_maker(return_keyboard(arr, flag))
def create_top_neghborhoods(buttons: list): return kb.keyboa_maker(buttons, copy_text_to_callback=True, front_marker='sa_')
import keyboa as kb from telebot import types from .text_data import * def create_top_neghborhoods(buttons: list): return kb.keyboa_maker(buttons, copy_text_to_callback=True, front_marker='sa_') start_keyboard = kb.keyboa_maker(["Let's start!", "About us"], copy_text_to_callback=True) rent_buy = kb.keyboa_maker(['Rent', 'Buy'], copy_text_to_callback=True, items_in_row=2) rent = kb.keyboa_maker(["Rent"], copy_text_to_callback=True) buy = kb.keyboa_maker(["Buy"], copy_text_to_callback=True) params = kb.keyboa_maker(EDIT_PARAMS, copy_text_to_callback=True, front_marker='edit_') done_btn = kb.keyboa_maker(START_SEARCHING, copy_text_to_callback=True) params_with_done = kb.keyboa_combiner(keyboards=(params, done_btn)) rental_types = kb.keyboa_maker(TYPES_OF_RENTAL, copy_text_to_callback=True, front_marker='tr_') rooms_count = kb.keyboa_maker(COUNT_OF_ROOMS, copy_text_to_callback=True, front_marker='cr_') price_range = kb.keyboa_maker(PRICE, copy_text_to_callback=True,
def deadline_calendar(id): flame_smile = u'\U0001F525' smile_skull = u'\U0001F480' base = sqlite3.connect('base.db') cursor = base.cursor() year = date.today().strftime("%Y") month = date.today().strftime("%m") day_count = calendar.Calendar().monthdays2calendar(int(year), int(month)) group_id = cursor.execute("select group_id from students where id=?", (id, )).fetchall()[0][0] tasks_id = cursor.execute( "select task_id from task_group where group_id=?", (group_id, )).fetchall() dd_dates = [] for i in tasks_id: db_date = cursor.execute("select deadline from tasks where task_id=?", (i[0], )).fetchall()[0][0] if db_date[5:] not in dd_dates: dd_dates.append(db_date[5:]) buttons = [] for i in range(len(day_count)): buttons.append([]) for j in range(len(day_count[i])): if day_count[i][j][0] == 0: buttons[i].append({" ": "EmptyBtn"}) else: tempdate = f"{month}-{day_count[i][j][0]}" if tempdate in dd_dates: if len(str(day_count[i][j][0])) == 1: buttons[i].append({ str(day_count[i][j][0]) + smile_skull: f"DeadBtn0{day_count[i][j][0]}" }) else: buttons[i].append({ str(day_count[i][j][0]) + smile_skull: f"DeadBtn{day_count[i][j][0]}" }) else: buttons[i].append({ str(day_count[i][j][0]): f"CalBtn{day_count[i][j][0]}" }) menu_button = [{"Вернуться в меню": "menu"}] kb_calendar = keyboa_maker(items=buttons) kb_menu = keyboa_maker(items=menu_button) kb = keyboa_combiner(keyboards=(kb_calendar, kb_menu)) bot.send_message( chat_id=id, text=f"{flame_smile}Это календарь дедлайнов{flame_smile}" f"\n{smile_skull} Черепками отмечены дни, до которых надо сдать задачи." f"\nНажав на число с черепком ты увидишь, какую именно задачу тебе надо " f"сдать в этот день", reply_markup=kb)
def search_aud(message, bot, storage, tz, last_msg=None): """Регистрация преподавателя""" global aud_list chat_id = message.chat.id message_id = message.message_id data = message message = message.text all_found_aud = [] all_results = [] prep_list = [] page = 0 if data.content_type == 'sticker': message = '' if last_msg: bot.delete_message(data.chat.id, data.message_id - 1) if ('На текущую неделю' == message or 'На следующую неделю' == message): return if not storage.get_schedule_aud(message) and len(message.replace(' ', '')) < 15: # Отправляем запросы в базу посимвольно for item in message: # Получаем все результаты запроса на каждый символ request_item_all = storage.get_schedule_aud(item) # Проходим по каждому результату запроса одного символа for i in range(len(request_item_all)): # Обращаемся к результатам у которых есть ключ "aud" request_item = request_item_all[i]['aud'] # Записывем все совпадения (Значения ключа "aud") prep_list.append(request_item) request_item = [] request_item_all = [] # Выделение наиболее повторяющихся элементов(а). Фактически результат запроса пользователя. qty_most_common = 0 prep_list_set = set(prep_list) for item in prep_list_set: qty = prep_list.count(item) if qty > qty_most_common: qty_most_common = qty # Переменная с результатом сортировки if message.replace(' ', '').lower() in item.replace('-', '').lower(): all_results.append(item.lower()) if storage.get_schedule_aud(message) and not all_results: # Результат запроса по аудам request_aud = storage.get_schedule_aud(message) # Циклы нужны для общего поиска. Здесь мы удаляем старые ключи в обоих реквестах и создаём один общий ключ, как для групп, так и для преподов for i in request_aud: i['search_aud'] = i.pop('aud') # Записываем слово, которое ищем request_word = message last_request = request_aud[-1] # Эти циклы записывают группы и преподов в нижнем регистре для удобной работы с ними for i in request_aud: all_found_aud.append(i['search_aud'].lower()) # Формируем полный багаж для пользователя list_search = [page, request_word, all_found_aud] # Записываем все данные под ключом пользователя aud_list[chat_id] = list_search # Выводим результат поиска с клавиатурой (кливиатур формируется по поисковому запросу) if len(request_aud) > 10: requests = request_aud[:10 * (page + 1)] more_than_10 = True msg = bot.send_message( chat_id=chat_id, text='Результат поиска', reply_markup=keyboards.make_keyboard_search_group_aud( last_request=last_request, page=page, more_than_10=more_than_10, requests=requests)) bot.register_next_step_handler(msg, search_aud, bot=bot, storage=storage, tz=tz, last_msg=msg) else: msg = bot.send_message( chat_id=chat_id, text='Результат поиска', reply_markup=keyboards.make_keyboard_search_group_aud( last_request=last_request, page=page, more_than_10=False, requests=request_aud)) bot.register_next_step_handler(msg, search_aud, bot=bot, storage=storage, tz=tz, last_msg=msg) if all_results and aud_list[chat_id] == []: all_found_aud = all_results request_word = data list_search = [page, request_word, all_found_aud] aud_list[chat_id] = list_search kb_all_results = keyboa_maker(items=all_found_aud, copy_text_to_callback=True, items_in_row=3) msg = bot.send_message(chat_id=chat_id, reply_markup=kb_all_results, text="Результат поиска") bot.register_next_step_handler(msg, search_aud, bot=bot, storage=storage, tz=tz, last_msg=msg) else: if len(aud_list[chat_id]) == 3: pass elif all_results: kb_all_results = keyboa_maker(items=all_found_aud, copy_text_to_callback=True, items_in_row=3) bot.send_message(chat_id=chat_id, reply_markup=kb_all_results, text="Результат поиска") else: msg = bot.send_message( chat_id=chat_id, text='Проверьте правильность ввода 😕', reply_markup=keyboards.make_keyboard_main_menu()) bot.register_next_step_handler(msg, search_aud, bot=bot, storage=storage, tz=tz, last_msg=msg) return return
import keyboa START_TEST = keyboa.keyboa_maker(['Пройти тест'], copy_text_to_callback=True) ANOTHER_TEST = keyboa.keyboa_maker(['Пройти другой тест'], copy_text_to_callback=True) PLUS_MINUS = keyboa.keyboa_maker(['+', '-'], items_in_row=2, copy_text_to_callback=True, front_marker='ans_')
except FileNotFoundError: with open('vk_exist.csv','w',newline='') as f: csv_writer=csv.writer(f) csv_writer.writerow(['link', 'name']) #reply_markups main_menu = tp.ReplyKeyboardMarkup(one_time_keyboard=True, resize_keyboard=1) main_menu.add('📖 Random page') db = [ "Send to DB" ] callback = keyboa_maker(items=db, copy_text_to_callback=True) db_ok = [ "THANKS" ] callback_ok = keyboa_maker(items=db_ok, copy_text_to_callback=True) #main_script def rand_page(user_id): link = 'https://vk.com/id' url = str(random.randint(1, 1000000000)) not_created = [] only_content = bs4.SoupStrainer("div", id='content') r = requests.get(link+url, stream=True, headers={'User-Agent': UserAgent().chrome}) soup = bs4.BeautifulSoup(r.text, "lxml", parse_only=only_content)