Beispiel #1
0
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)
Beispiel #2
0
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)
Beispiel #3
0
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)
Beispiel #4
0
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)
Beispiel #5
0
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)
Beispiel #6
0
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)
Beispiel #7
0
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)
Beispiel #8
0
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)
Beispiel #9
0
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)
Beispiel #10
0
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)
Beispiel #11
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)
Beispiel #12
0
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)
Beispiel #13
0
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)
Beispiel #14
0
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)
Beispiel #15
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')
Beispiel #16
0
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)
Beispiel #17
0
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)   
Beispiel #18
0
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)
Beispiel #19
0
def not_understand(message):
    lang_num = language_define(message)
    bot.send_message(message.chat.id, take_phrase_1('n_u', lang_num))