def settings(message): lang_num = language_define(message) markup = types.ReplyKeyboardMarkup(row_width=1, resize_keyboard=True) markup.row(take_phrase_1('languages_o', lang_num)) markup.row(take_phrase_1('developing', lang_num)) markup.row(take_phrase_1('back', lang_num)) bot.send_message(message.chat.id, take_phrase_1('choose', lang_num), reply_markup=markup)
def users_queries_today(message): lang_num = language_define(message) text = take_phrase_2('statistic', 'stats_text_pq_today', lang_num) markup = types.ReplyKeyboardMarkup(resize_keyboard=True) markup.row(take_phrase_2('statistic', 'today_users', lang_num), take_phrase_2('statistic', 'today_requests', lang_num)) markup.row(take_phrase_1('back_menu', lang_num), take_phrase_1('back_start', lang_num)) bot.send_message(message.chat.id, text, reply_markup=markup)
def start_menu(message): ID = message.from_user.id lang_num = language_define(message) markup = types.ReplyKeyboardMarkup(resize_keyboard=True) markup.row(take_phrase_1('menu', lang_num)) markup.row(take_phrase_1('settings', lang_num)) start_text = take_phrase_1('start', lang_num) bot.send_message(message.chat.id, start_text, reply_markup=markup)
def languages_f(message, word=None): if word: lang_num = 1 if 'рус' in word.lower() else 0 else: lang_num = 1 if 'рус' in message.text.lower() else 0 check_user_all_new(message, take_phrase_1('languages_type', lang_num)) make_query('update Users_new set lang = "{}"'.format(take_phrase_1('languages_type', lang_num))) bot.send_message(message.chat.id, text=take_phrase_1('langs', lang_num)+take_phrase_1('languages_type', lang_num)) if message.text == 'Русский(ru)' or message.text == 'English(en)': start_menu(message) else: settings(message)
def menu(message): lang_num = language_define(message) menu_text = take_phrase_1('menu_text', lang_num) markup = types.ReplyKeyboardMarkup(resize_keyboard=True) markup.row(take_phrase_2('quests', 'weather', lang_num), take_phrase_2('quests', 'stats', lang_num)) if lang_num == 1: markup.row('Игра в города👾') markup.row(take_phrase_1('back', lang_num)) bot.send_message(message.chat.id, menu_text, reply_markup=markup)
def start(message): try: check_user_all_new(message, 'English') check_user_new(message, 'English') markup = types.ReplyKeyboardMarkup(row_width=1, resize_keyboard=True) markup.row(take_phrase_1('languages_type_1', 1), take_phrase_1('languages_type_1', 0)) start_text = phrases["start_text"] bot.send_message(message.chat.id, start_text, reply_markup=markup) except Exception as e: report_error(e)
def stat_menu(message): lang_num = language_define(message) text = take_phrase_2('statistic', 'stats_text', lang_num) markup = types.ReplyKeyboardMarkup(resize_keyboard=True) markup.row(take_phrase_2('statistic', 'today_users', lang_num), take_phrase_2('statistic', 'all_users', lang_num)) markup.row(take_phrase_2('statistic', 'today_requests', lang_num), take_phrase_2('statistic', 'all_requests', lang_num)) if lang_num == 1: markup.row('Рейтинг игроков🏆') markup.row(take_phrase_1('back_menu', lang_num), take_phrase_1('back_start', lang_num)) bot.send_message(message.chat.id, text, reply_markup=markup)
def weather_menu(message): lang_num = language_define(message) text = take_phrase_2('weather', 'weather_text', lang_num) markup = types.ReplyKeyboardMarkup(resize_keyboard=True) markup.row(take_phrase_2('weather', 'now', lang_num), take_phrase_2('weather', 'today', lang_num)) markup.row(take_phrase_2('weather', 'tomorrow', lang_num), take_phrase_2('weather', 'day_after_tomorrow', lang_num)) markup.row(take_phrase_2('weather', 'week', lang_num)) markup.row(take_phrase_1('back_menu', lang_num), take_phrase_1('back_start', lang_num)) bot.send_message(message.chat.id, text, reply_markup=markup)
def preparing_2(message): lang_num = language_define(message) ask_text = take_phrase_2('place_input', 'day_after_tomorrow', lang_num) keyboard = types.ReplyKeyboardMarkup(row_width=1, resize_keyboard=True) button_geo = types.KeyboardButton(text=take_phrase_1('geolocation', lang_num), request_location=True) keyboard.add(button_geo) sent = bot.reply_to(message, ask_text, reply_markup = keyboard) bot.register_next_step_handler(sent, weather_2)
def preparing_0(message, data=None): if data: lang_num = 0 if 'Get' in data else 1 else: lang_num = language_define(message) ask_text = take_phrase_2('place_input', 'today', lang_num) keyboard = types.ReplyKeyboardMarkup(row_width=1, resize_keyboard=True) button_geo = types.KeyboardButton(text=take_phrase_1('geolocation', lang_num), request_location=True) keyboard.add(button_geo) sent = bot.reply_to(message, ask_text, reply_markup = keyboard) bot.register_next_step_handler(sent, weather_0)
def preparing_game(message, state=1): if state == 1: prepare_game_db(message) text = take_game_phrase('glhf') markup = types.ReplyKeyboardMarkup(resize_keyboard=True) markup.row(take_phrase_1('back_menu', 1)) bot.send_message(message.chat.id, text, reply_markup=markup) text = take_game_phrase('write_town') else: text = take_game_phrase('write_other_town') sent = bot.send_message(message.chat.id, text) bot.register_next_step_handler(sent, game_play)
def game_play_1(message): place = message.text if place == take_phrase_1('back_menu',1): menu(message) else: towns = (make_query('''select Russian from Rus_Towns; ''')[0][0]).split('|') nickname = nickname_define(message) used_towns = make_query(f'''select Town from {nickname}; ''') used_towns = [town[0] for town in used_towns] forbidden_letters = ('ё', 'ъ', 'ь', 'ы') if place in towns and place not in used_towns: last_town = used_towns[-1] choice = list() for i in range(1, 4): if last_town[-i] not in forbidden_letters: bot_sym = last_town[-i] break if bot_sym == (place[0]).lower(): keyboard = types.InlineKeyboardMarkup() keyboard.add(*[types.InlineKeyboardButton(text=name, callback_data=name) for name in [take_game_phrase('inf')]]) bot.send_message(message.chat.id, take_game_phrase('town_inf').format(place), reply_markup=keyboard) make_query(f'insert into {nickname} (Town) values (?)', (place, )) if len(used_towns) == 30: finish(message, nickname) else: for i in range(1, 4): if place[-i] not in forbidden_letters: user_sym = place[-i] break for town in towns: if user_sym.upper() == town[0] and town not in used_towns: choice.append(town) if len(choice) == 0: finish(message, nickname, user_sym) else: random_town = random.choice(choice) keyboard = types.InlineKeyboardMarkup() keyboard.add(*[types.InlineKeyboardButton(text=name, callback_data=name) for name in [take_game_phrase('inf')]]) bot.send_message(message.chat.id, random_town, reply_markup=keyboard) make_query(f'insert into {nickname} (Town) values (?)', (random_town, )) preparing_game_1(message, random_town, towns, forbidden_letters) else: preparing_game_1(message, used_towns[-1], towns, forbidden_letters, state=2) else: preparing_game_1(message, used_towns[-1], towns, forbidden_letters, state=1)
def weather_or_stat(message, address): lang_num = language_define(message) ask_text = take_phrase_1('weather_or_stat', lang_num) keyboard = types.ReplyKeyboardMarkup(row_width=1, resize_keyboard=True) keyboard.add( types.InlineKeyboardButton( text=take_phrase_2('quests', 'weather', lang_num), callback_data=take_phrase_2('quests', 'weather', lang_num) + '|' + (address if address else 'None')), types.InlineKeyboardButton(text=take_phrase_2('quests', 'stats', lang_num), callback_data=take_phrase_2( 'quests', 'stats', lang_num))) bot.send_message(message.chat.id, ask_text, reply_markup=keyboard)
def game_play(message): place = message.text if place == take_phrase_1('back_menu',1): menu(message) else: towns = (make_query('''select Russian from Rus_Towns; ''')[0][0]).split('|') if place in towns: nickname = nickname_define(message) forbidden_letters = ('ё', 'ъ', 'ь', 'ы') choice = list() make_query(f'insert into {nickname} (Town) values (?)', (place, )) keyboard = types.InlineKeyboardMarkup() keyboard.add(*[types.InlineKeyboardButton(text=name, callback_data=name) for name in [take_game_phrase('inf')]]) bot.send_message(message.chat.id, take_game_phrase('town_inf').format(place), reply_markup=keyboard) for i in range(1, 4): if place[-i] not in forbidden_letters: sym = place[-i] break for town in towns: if sym.upper() == town[0] and town != place: choice.append(town) random_town = random.choice(choice) keyboard = types.InlineKeyboardMarkup() keyboard.add(*[types.InlineKeyboardButton(text=name, callback_data=name) for name in [take_game_phrase('inf')]]) bot.send_message(message.chat.id, random_town, reply_markup=keyboard) make_query(f'insert into {nickname} (Town) values (?)', (random_town, )) preparing_game_1(message, random_town, towns, forbidden_letters) else: preparing_game(message, 0)
def inline(c): if c.data == 'Подробнее': bot.edit_message_text(chat_id=c.message.chat.id, message_id=c.message.message_id, text=phrases['game']['advanced_rules'], parse_mode='Markdown') elif c.data == 'Информация': c_req = (c.message.text).strip().split() town = c_req[-1] if len(c_req) == 5: town = f'{c_req[3]}_{c_req[4]}' elif len(c_req) == 2: town = f'{c_req[0]}_{c_req[1]}' db_inf = make_query('select inf from Inf_towns where town=?', (town, )) if len(db_inf) != 0: text = db_inf[0][0] else: req = requests.get(f'https://ru.wikipedia.org/wiki/{town}').text soup = BeautifulSoup(req, 'html.parser') all_p = soup.find_all('p') try: inf_extra = (all_p[0]).text if 'отпатрулирована' in inf_extra: inf_extra = (all_p[1]).text inf_extra = inf_extra.strip().split() inf = '' for j in range(2): for part in inf_extra: l, r = part.find('['), part.find(']') if l != -1: part = part.replace(part[l:r+1], '') inf += f'{part} ' if 'фамилия' in inf or 'населённых пунктов' in inf: raise Exception else: text = phrases['game']['all_inf'].format(inf, town) make_query(f'insert into Inf_towns (town, inf) values ("{town}", "{text}")') except Exception: text = phrases['game']['no_inf'].format(' '.join(town.split('_')), town) bot.edit_message_text(chat_id=c.message.chat.id, message_id=c.message.message_id, text=text, parse_mode='Markdown') elif 'Больше' in c.data or 'More' in c.data: _, lang_num, town, date = (c.data).split('&') lang_num, date = int(lang_num), list(map(int, date.split('-'))) date = datetime.date(day=date[2], month=date[1], year=date[0]) n = (date - datetime.date.today()).days try: coords = get_coords(c.message, town) town = coords[0] if len(coords) == 3: latitude, longitude = coords[1:] name = name_define(n, lang_num) weather_inf = get_inf(lang_num, latitude, longitude) precipType_ru, summary, search_term, inf = get_main_parts(n, lang_num, town, weather_inf, name) bot.edit_message_text(chat_id=c.message.chat.id, message_id=c.message.message_id, text=inf, parse_mode='Markdown') except Exception as e: bot.edit_message_text(chat_id=c.message.chat.id, message_id=c.message.message_id, text=take_phrase_2('errors', 'top_error', lang_num)) inf = '' try: check_user(c.message) check_user_all(c.message) query_add(c.message, name, town, inf, '', '') except Exception as e: report_error(e) elif 'Get weather' in c.data or 'Получить погоду' in c.data: address = c.data.strip().split('|')[-1] if address != 'None': weather_0(c.message, address, lang_num=0 if 'Get' in c.data else 1) else: preparing_0(c.message, c.data) elif 'Get statistics' in c.data or 'Получить статистику' in c.data: lang_num = 0 if 'Get' in c.data else 1 text = take_phrase_1('stats_text_pq_2', lang_num) markup = types.ReplyKeyboardMarkup(resize_keyboard=True) markup.row(take_phrase_2('statistic', 'today_users', lang_num), take_phrase_2('statistic', 'today_requests', lang_num)) markup.row(take_phrase_1('back_menu', lang_num), take_phrase_1('back_start', lang_num)) bot.send_message(c.message.chat.id, text, reply_markup=markup) else: bot.send_message(c.message.chat.id, 'C Error')
def text_receiving(message): t = message.text ID = message.from_user.id lang_num = language_define(message) if t == 'Сейчас' or t == 'Now': preparing(message) elif t == 'Сегодня' or t == 'Today': preparing_0(message) elif t == 'Завтра' or t == 'Tomorrow': preparing_1(message) elif t == 'Послезавтра' or t == 'Day after tomorrow': preparing_2(message) elif t == 'Неделя' or t == 'Week': preparing_week(message) elif t == 'Кол-во пользователей за сегодня' or t == 'Number of users today': get_users_today(message) elif t == 'Кол-во пользователей за все время' or t == 'Number of all users': get_users_all(message) elif t == 'Кол-во запросов за сегодня' or t == 'Number of requests today': get_query_today(message) elif t == 'Кол-во запросов за все время' or t == 'Number of all requests': get_query_all(message) elif t == '⬅️Назад(Меню)' or t == 'Меню📋' or t == 'Menu📋' or t == '⬅️Back(Menu)': menu(message) elif t == 'Получить погоду🌤' or t == 'Get weather🌤': weather_menu(message) elif t == 'Получить статистику📈' or t == 'Get statistics📈': stat_menu(message) elif t == 'Игра в города👾': game(message) elif t == 'Рейтинг игроков🏆': top(message) elif t == 'English' or t == 'Русский' or t == 'English(en)' or t == 'Русский(ru)': languages_f(message) elif t == 'Настройки⚙️' or t == 'Settings⚙️' or t == '⬅️Back(Settings)' or t == '⬅️Назад(Настройки)': settings(message) elif t == 'Language🌏' or t == 'Язык🌏': languages_set(message) elif t == '⬅️Back' or t == '⬅️Назад' or t == '⬅️Назад(Начало)' or t == '⬅️Back(Start)': start_menu(message) elif t == 'Creator👨🏻💻' or t == 'Разработчик👨🏻💻': developing(message) else: _list, address = text_message_processing(t, 'ru' if lang_num else 'en') if 'rus' in _list: languages_f(message, 'рус') elif 'en' in _list: languages_f(message, 'англ') elif 'developer' in _list: developing(message) elif 'game' in _list and language_define(message) == 1: game(message) elif 'top' in _list and language_define(message) == 1: top(message) elif 'lang' in _list: languages_set(message) elif 'settings' in _list: settings(message) elif _list: choosing(message, _list, address) else: bot.send_message(message.chat.id, take_phrase_1('n_u', lang_num)) start_menu(message)
def languages_set(message): lang_num = language_define(message) markup = types.ReplyKeyboardMarkup(row_width=1, resize_keyboard=True) markup.row('Русский', 'English') markup.row(take_phrase_1('back_settings', lang_num), take_phrase_1('back_start', lang_num)) bot.send_message(message.chat.id, take_phrase_1('language', lang_num), reply_markup=markup)
def weather_week(message, adress=None): place = adress if adress else message.text lang_num = language_define(message) try: coords = get_coords(message, place) town = coords[0] if len(coords) == 3: latitude, longitude = coords[1:] if lang_num == 0: town = translate(town, lang_num) weather_inf = get_inf(lang_num, latitude, longitude) full_inf = '' date = datetime.date.today() - datetime.timedelta(days=1) type_str = take_character_1('type', lang_num) temperature_max_str = take_character_2('temperature', 'max', lang_num) temperature_min_str = take_character_2('temperature', 'min', lang_num) for n in range(8): date += datetime.timedelta(days=1) try: subjects = weather_inf['daily']['data'][n] summary = subjects['summary'] keys_ = subjects.keys() precipType = subjects[ 'precipType'] if 'precipType' in keys_ else '' if (lang_num == 1 and precipType): precipType = translate(precipType) temperatureHigh = round( 5 / 9 * (subjects['temperatureHigh'] - 32)) if 'temperatureHigh' in keys_ else '' temperatureLow = round( 5 / 9 * (subjects['temperatureLow'] - 32)) if 'temperatureLow' in keys_ else '' inf = f'{date}, {town}:\n{summary}{type_str}{precipType}\ {"%s%s°C" % (temperature_max_str, temperatureHigh) if temperatureHigh else ""}\ {"%s%s°C" % (temperature_min_str, temperatureLow) if temperatureLow else ""}' keyboard = types.InlineKeyboardMarkup() keyboard.add(*[ types.InlineKeyboardButton( text=word, callback_data=f'{word}&{lang_num}&{town}&{date}') for word in [take_phrase_1('more', lang_num)] ]) bot.send_message(message.chat.id, inf, reply_markup=keyboard) except KeyError: inf = f'{date} {town}:\n{language_1("errors", "top_0_error", lang_num)}' bot.send_message(message.chat.id, inf) full_inf += inf except Exception as e: town = place full_inf = '' bot.send_message(message.chat.id, take_phrase_2('errors', 'top_error', lang_num)) try: check_user(message) check_user_all(message) query_add(message, 'Неделя', town, full_inf, '', '') except Exception as e: report_error(e) weather_menu(message)
def not_understand(message): lang_num = language_define(message) bot.send_message(message.chat.id, take_phrase_1('n_u', lang_num))