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)
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 ----->>>'''
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()