async def loc_del(mes: Message):
    #journal_log(mes)
    if not uc.check_perm_role(mes.from_user.id, [2, 3, 4]):
        await mes.answer('Доступ запрещён.')
        return
    if len(mes.text) < 8:
        await mes.answer('/l_del [location_code]')
        return

    code = mes.text[7:]
    if not mes.db.checkall('SELECT * FROM loc WHERE code = ?', [code]):
        await mes.answer('Невозможно. Такой локации нет в базе.')
        return

    mes.db.query('DELETE FROM loc WHERE code = ?', [code])
    mes.db.query('DELETE FROM loc_buff_info WHERE code = ?', [code])
    mes.db.query('DELETE FROM al_guild_info WHERE code = ?', [code])

    chats = mes.db.checkall('SELECT id FROM chats WHERE delete_loc_ntf = 1',
                            [])
    answer = f'Локация с кодом <code>{code}</code> была удалена!\n\nУдаливший: @{mes.from_user.username}'

    if not chats:
        await mes.answer('Done!')
        return

    for chat in chats:
        try:
            await bot.send_message(chat[0], answer)
        except:
            pass
        await asyncio.sleep(0.3)
    await mes.answer('Done!')
async def l_history(mes: Message):
    if not uc.check_perm_role(mes.from_user.id, [2, 3, 4]):
        await mes.answer('Доступ запрещён.')
        return
    if len(mes.text) < 12:
        await mes.answer('/l_history [code]')
        return

    code = mes.text[11:]
    loc = mes.db.check('SELECT name,lvl,conqueror FROM loc WHERE code = ?',
                       [code])

    if not loc:
        await mes.answer('Данной локации нет в базе данных.')
        return
    if loc[1] != 99:
        await mes.answer('Информация доступна только по альянсам.')
        return

    loc_history = mes.db.checkall(
        'SELECT time, url, txt FROM loc_history WHERE code = ? ORDER BY -url LIMIT 20',
        [code])
    loc_history = '\n\n'.join([
        '[{}]\n{}'.format(
            '<a href="https://t.me/ChatWarsDigest/{}">{}</a>'.format(
                str(l[1]), l[0]), l[2]) for l in loc_history
    ])
    loc_history = loc_history if loc_history else 'Нет данных'

    await mes.answer(AL_HISTORY_TEXT.format(code, loc_history),
                     disable_web_page_preview=True)
async def l_capture(mes: Message):
    if not uc.check_perm_role(mes.from_user.id, [2, 3, 4]):
        await mes.answer('Доступ запрещён.')
        return
    if len(mes.text) < 12:
        await mes.answer('/l_capture [code]')
        return

    code = mes.text[11:]
    loc = mes.db.check('SELECT name,lvl,conqueror FROM loc WHERE code = ?',
                       [code])

    if not loc:
        await mes.answer('Данной локации нет в базе данных.')
        return
    if loc[1] != 99:
        await mes.answer('Информация доступна только по альянсам.')
        return

    capture_locs = mes.db.checkall(
        'SELECT code,name,lvl FROM loc WHERE conqueror = ? ORDER BY lvl LIMIT 20',
        [loc[0]])
    capture_locs = '\n'.join(['<a href="https://t.me/share/url?url=/l_info%20{}"><b>{}{} lvl.{}</b></a>'.format(
        l[0], LOC_TYPES.get(l[1].split(' ')[-1], 'error'), l[1], str(l[2])) for l in \
        capture_locs]) if capture_locs else 'Нет данных'

    await mes.answer(AL_CAPTURE_TEXT.format(code, capture_locs),
                     disable_web_page_preview=True)
async def new_loc_info(mes: Message):
    #journal_log(mes)
    if not uc.check_perm_role(mes.from_user.id, [2, 3, 4]):
        await mes.answer('Доступ запрещён.')
        return

    code = re.search(r'ga_use_(?P<code>.+)_', mes.text).group('code')
    if not mes.db.check('SELECT * FROM loc WHERE code = ?', [code]):
        await mes.answer('Данной локации нет в базе данных.')
        return

    cont1 = mes.text.split(' attractions:\n')
    parse = re.search(r'(?P<loc_name>\w.+) lvl\.(?P<loc_lvl>\d+)', cont1[0])
    name = parse.group('loc_name')
    lvl = int(parse.group('loc_lvl'))

    cont1 = cont1[1].split('✨')[1:]
    for el in cont1:
        bless_type = el.split('\n')[0]
        cont2 = el.replace(bless_type + '\n', '').split('🎖\n')
        for l in cont2:
            if l:
                bless_name = l.split('\n')[0][2:]
                if not mes.db.check(
                        'SELECT * FROM loc_buff_info WHERE code = ? and bless_name = ?',
                    [code, bless_name]):
                    mes.db.query(
                        'INSERT INTO loc_buff_info (name, lvl, code, bless_type, bless_name) VALUES (?,?,?,?,?)',
                        [name, lvl, code, bless_type, bless_name])
    await mes.answer('Записал👍')
async def settings_v(call: CallbackQuery):
    await call.answer(cache_time=2)
    if not call.db.check('SELECT * FROM users WHERE id = ?',
                         [call.from_user.id]) or not uc.check_perm_role(
                             call.from_user.id, [2, 3, 4]):
        await call.answer('Доступ запрещён.')
        return

    c = {
        'dln:on': ['delete_loc_ntf', True],
        'dln:off': ['delete_loc_ntf', False],
        'nln:on': ['new_loc_ntf', True],
        'nln:off': ['new_loc_ntf', False],
        'brf:on': ['brief', True],
        'brf:off': ['brief', False],
        'brfm:on': ['brief_mode', True],
        'brfm:off': ['brief_mode', False]
    }
    call.db.query(
        'UPDATE chats SET {} = ? WHERE id = ?'.format(c.get(call.data)[0]),
        [c.get(call.data)[1], call.message.chat.id])

    d = {0: 'Откл❌', 1: 'Вкл✅'}
    result = call.db.check(
        'SELECT delete_loc_ntf, new_loc_ntf, brief, brief_mode FROM chats WHERE id = ?',
        [call.message.chat.id])
    answer = SETTINGS_TEXT.format(d.get(result[0]), d.get(result[1]),
                                  d.get(result[2]), d.get(result[3]))
    await call.message.edit_text(answer,
                                 reply_markup=settings_keyboard(result))
async def battle(mes: Message):
    #journal_log(mes)
    if mes.chat.type != 'private':
        return
    if not uc.check_perm_role(mes.from_user.id, [2, 3, 4]):
        await mes.answer('Доступ запрещён.')
        return
    await mes.answer(**SECTION_LIST.get(mes.text))
    await battle_states.menu.set()
async def craft(mes: Message):
    #journal_log(mes)
    if mes.chat.type != 'private':
        return
    if not uc.select_id(mes.from_user.id) or not uc.check_perm_role(mes.from_user.id, [2, 3]):
        await mes.answer('Доступ запрещён.')
        return

    await mes.answer(**SECTION_LIST.get(mes.text))
    await craft_states.Q1.set()
async def news(mes: Message):
    #journal_log(mes)
    if not uc.check_perm_role(mes.from_user.id, [2, 3]):
        await mes.answer('Доступ запрещён.')
        return
    if len(mes.text) < 7:
        await mes.answer('Необходимо ввести: /news [текст новости].')
        return

    news = mes.text[6:]
    mes.db.query('UPDATE settings SET info = ? WHERE var = "news"', [news])
    await mes.answer(f'<b>Установлена новость:</b>\n{news}')
async def say(mes: Message):
    #journal_log(mes)
    if not uc.check_perm_role(mes.from_user.id, [2, 3]):
        await mes.answer('Доступ запрещён.')
        return
    if len(mes.text) < 6:
        await mes.answer('Необходимо ввести: /say [текст объявления].')
        return

    txt = mes.text[5:]
    for uid in uc.select_guild_tag('AT'):
        try:
            await bot.send_message(uid, txt)
        except:
            pass
        await asyncio.sleep(0.3)

    await mes.answer(f'<b>Объявление успешно объявлено</b>:\n{txt}')
async def settings(mes: Message):
    if mes.chat.type != 'supergroup':
        return
    if not mes.db.check('SELECT * FROM chats WHERE id = ?', [mes.chat.id]):
        await mes.answer(
            'Данного чата нет в базе. Пригласите бота по новой в чат или обратитесь к @Irrenriel.'
        )
        return
    if not uc.check_perm_role(mes.from_user.id, [2, 3, 4]):
        await mes.answer('Доступ запрещён.')
        return

    d = {0: 'Откл❌', 1: 'Вкл✅'}
    result = mes.db.check(
        'SELECT delete_loc_ntf, new_loc_ntf, brief, brief_mode FROM chats WHERE id = ?',
        [mes.chat.id])
    answer = SETTINGS_TEXT.format(d.get(result[0]), d.get(result[1]),
                                  d.get(result[2]), d.get(result[3]))
    await mes.answer(answer, reply_markup=settings_keyboard(result))
async def loc_info(mes: Message):
    #journal_log(mes)
    if not uc.check_perm_role(mes.from_user.id, [2, 3, 4]):
        await mes.answer('Доступ запрещён.')
        return
    if len(mes.text) < 9:
        await mes.answer('/l_info [code]')
        return

    code = mes.text[8:]
    loc = mes.db.check(
        'SELECT code,name,lvl,conqueror FROM loc WHERE code = ?', [code])
    pattern = mes.db.check(
        'SELECT code,name,lvl,conqueror FROM loc WHERE name LIKE ?',
        [code + '%'])

    if loc or pattern:
        answer = await loc_info_answer(mes, loc if loc else pattern)
    else:
        answer = 'Данной локации нет в базе данных.'
    await mes.answer(answer, disable_web_page_preview=True)
Exemple #12
0
dp.register_message_handler(reg_as, commands=['reg_as'])

# Mana drink
dp.register_message_handler(mana_start, commands=['mana_start'])
dp.register_message_handler(mana_stop, commands=['mana_stop'])

# /j
#dp.register_message_handler(journal_func.journal, commands=['j'])

# Закрыть Инлайн Клавиатуру
dp.register_callback_query_handler(callback_cancel,
                                   lambda c: c.from_user.id == ADMIN,
                                   text='j_cancel')
dp.register_callback_query_handler(
    callback_cancel,
    lambda c: uc.check_perm_role(c.from_user.id, [2, 3, 4]),
    text='s_cancel')

# New chat id
dp.register_message_handler(new_chat_id, content_types='new_chat_members')

# /settings
dp.register_message_handler(settings_func.settings, commands=['settings'])
dp.register_callback_query_handler(settings_func.settings_v,
                                   text=[
                                       'dln:on', 'dln:off', 'nln:on',
                                       'nln:off', 'brf:on', 'brf:off',
                                       'brfm:on', 'brfm:off'
                                   ])
'''------------------------------------------------------------------------------------------------------------------'''
'''<<<-----   DEFAULT   ----->>>'''
Exemple #13
0
async def loc_check_f(mes: Message):
    #journal_log(mes)
    if not uc.check_perm_role(mes.from_user.id, [2, 3, 4]):
        await mes.answer('Доступ запрещён.')
        return

    if mes.from_user.id != ADMIN:
        now = datetime.datetime.now()
        now_str = now.strftime('%Y-%m-%d-%H-%M-%S')
        last_update = mes.db.check(
            'SELECT info FROM settings WHERE name = "last_l_check_datetime"')

        if last_update and last_update[0]:
            lu = last_update[0].split('-')
            td = datetime.timedelta(hours=7, minutes=59)
            lu_date = datetime.datetime(year=int(lu[0]),
                                        month=int(lu[1]),
                                        day=int(lu[2]),
                                        hour=int(lu[3]),
                                        minute=int(lu[4]),
                                        second=int(lu[5]))

            if now - lu_date < td:
                l = await mes.answer(
                    f'Не доступно! Запрещено до {lu_date + td}.\nДля экстренной проверки обратитесь к @Irrenriel.'
                )
                await asyncio.sleep(2)
                await mes.delete()
                await asyncio.sleep(3)
                await l.delete()
                return
            else:
                mes.db.query(
                    'UPDATE settings SET info = ? WHERE name = "last_l_check_datetime"',
                    [now_str])
        else:
            mes.db.query(
                'UPDATE settings SET info = ? WHERE name = "last_l_check_datetime"',
                [now_str])

    await mes.answer('Выполняется, жди...')
    err = "Strange fog is so dense that you can't reach this place."
    text = 'Истёкшие локации!\n\n'
    req = 'SELECT code FROM loc WHERE lvl != 99' if mes.text.startswith(
        '/l_chk') else 'SELECT code FROM loc'
    locs = mes.db.checkall(req)
    result = []

    await main_client.connect()
    for loc in locs:
        if loc[0].startswith('NoneCode'):
            continue
        async with main_client.conversation(CW_BOT_ID) as conv:
            time.sleep(float(str(random.uniform(1, 3))[0:4]))
            await conv.send_message('/ga_atk_' + loc[0])
            ga_atk_answer = await conv.get_response()

            if ga_atk_answer.message == 'Ты сейчас занят другим приключением. Попробуй позже.' or 'Ветер завывает по окрестным лугам, замки как будто вымерли. Это воины зашивают раны и латают доспехи после тяжелой битвы. Ближайшие несколько минут все учреждения и ворота замка закрыты. Жди сводки с полей в @ChatWarsDigest.':
                await mes.answer(
                    'Мы сейчас заняты другим приключением. Попробуйте позже.')
                return

            if ga_atk_answer.message == err:
                time.sleep(float(str(random.uniform(1, 3))[0:4]))
                await conv.send_message('/ga_def_' + loc[0])
                ga_def_answer = await conv.get_response()

        if ga_atk_answer.message == err and ga_def_answer.message == err:
            req = mes.db.check(
                'SELECT name, lvl, code FROM loc WHERE code = ?', [loc[0]])
            answer = LOC_TYPES.get(req[0].split(' ')[-1], '🎪 ') + req[0] + (
                "" if req[1] == 99 else " lvl. " + str(req[1]))
            result.append('<b>{}</b>\n  └ <code>{}</code>'.format(
                answer, req[2]))
            mes.db.query('DELETE FROM loc WHERE code = ?', [loc[0]])
            mes.db.query('DELETE FROM loc_buff_info WHERE code = ?', [loc[0]])
            if not mes.text.startswith('/l_chk'):
                mes.db.query('DELETE FROM al_guild_info WHERE code = ?',
                             [loc[0]])

    chats = mes.db.checkall('SELECT id FROM chats WHERE delete_loc_ntf = 1',
                            [])
    if not chats and not result:
        await mes.answer('Done!')
        return
    for chat in chats:
        try:
            await bot.send_message(chat[0], text + '\n\n'.join(result))
        except:
            pass
        await asyncio.sleep(0.3)
    await mes.answer('Done!')
    mes.db.query('UPDATE settings SET info = ? WHERE name = "last_l_check"',
                 [str(datetime.datetime.today().strftime('%d.%m.%Y %H:%M'))])

    async with main_client.conversation(CW_BOT_ID) as conv:
        time.sleep(float(str(random.uniform(1, 3))[0:4]))
        await conv.send_message('/myshop_open')
    await main_client.disconnect()