async def sections(mes: Message): #journal_log(mes) if not uc.select_id(mes.from_user.id): await mes.answer('Доступ запрещён.') return await mes.answer(**SECTION_LIST.get(mes.text))
async def help(mes: Message): #journal_log(mes) if mes.chat.type != 'private': return if not uc.select_id(mes.from_user.id): await mes.answer('Доступ запрещён.') return res = uc.select_id(mes.from_user.id).get('role') answer = { 1: HELP_MEMBER_TEXT, 2: HELP_COM_TEXT, 3: HELP_COM_TEXT, 4: HELP_MEMBER_TEXT } await mes.answer(answer.get(res[0], 'Error'))
async def patchnote(mes: Message): #journal_log(mes) if mes.chat.type != 'private': return if not uc.select_id(mes.from_user.id): await mes.answer('Доступ запрещён.') return await mes.answer(PATCHNOTE_TEXT, reply_markup=patchnote_keyboard)
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 top(mes: Message): if not uc.select_id(mes.from_user.id): await mes.answer('Доступ запрещён.') return req = 'SELECT nickname, class, guild_tag, top_loc FROM users WHERE top_loc != 0 ORDER BY -top_loc LIMIT 10' text = '<u><b>🗺Топ нашедших:</b></u>\n\n' users = mes.db.checkall(req) for i, user in enumerate(users): text += f'<b>{i+1}) {user[1]}[{user[2]}]{user[0]} — {user[3]}</b>\n' await mes.answer(text)
async def reg_as(mes: Message): if mes.from_user.id != ADMIN: return if mes.reply_to_message is None: await mes.answer('Error') return if not uc.select_id(mes.reply_to_message.from_user.id): await mes.answer('Not in database') return mes.db.query('UPDATE users SET role = ? WHERE id = ?', [mes.text[8:], mes.reply_to_message.from_user.id]) uc.loading()
async def loc_miss(mes: Message): if not uc.select_id(mes.from_user.id): await mes.answer('Доступ запрещён.') return res = mes.db.checkall('SELECT name, lvl FROM loc WHERE code LIKE "NoneCode%"', []) answer = '<b><u>🔎Разыскиваемые локации:</u></b>\n\n{}' txt = '' if not res: answer = answer.format('Пусто') await mes.answer(answer) return for i, l in enumerate(res): txt += '<b>{}){} {} lvl.{}</b>\n\n'.format(i+1, LOC_TYPES.get(l[0].split(" ")[-1]), l[0], l[1]) await mes.answer(answer.format(txt))
async def start_func(mes: Message, state: FSMContext): #await journal_log(mes) if mes.chat.type != 'private': return if uc.select_id(mes.from_user.id): # if already registered news = mes.db.check('SELECT info FROM settings WHERE name = "news"', [])[0] await mes.answer(START_MAIN_MENU_TEXT.format( random.choice(START_HEADER_TEXT), news), reply_markup=start_menu) await state.finish() else: for el in START_INVITE_TEXT: await mes.answer(el) await asyncio.sleep(0.5) await start_states.Q1.set()
async def pub_pinnn(query: InlineQuery): pin_id = query.db.check( 'SELECT info FROM settings WHERE name = "al_pin_num"')[0] data_pid = query.query[8:] if pin_id != data_pid: return user = uc.select_id(query.from_user.id) if user: guild_tag = user.get('guild_tag') castle = CASTLE_EMBLEMS_AROUND.get(user.get('castle')) d = f'🔹{castle}[{guild_tag}]' pin_order = query.db.check( 'SELECT info FROM settings WHERE name = "al_pin"')[0] if d not in pin_order: pin_order = pin_order + '\n' + d query.db.query( 'UPDATE settings SET info = ? WHERE name = "al_pin"', [pin_order]) x = query.db.check( 'SELECT info FROM settings WHERE name = "al_pin_mes_id"')[0] al_pin_mid_dict = json.loads(x) keyboard = pub_pin_keyboard(f'pub_pin:{data_pid}') for mid in al_pin_mid_dict.items(): try: await bot.edit_message_text(pin_order, int(mid[0]), int(mid[1]), reply_markup=keyboard) await asyncio.sleep(0.3) except: pass txt = query.db.check( 'SELECT info FROM settings WHERE name = "al_pin_pub"')[0] results = [] results.append( InlineQueryResultArticle( id='1', title='📯Приказ', description='Опубликовать приказ', input_message_content=InputTextMessageContent(message_text=txt))) await query.answer(results=results, cache_time=1, is_personal=True)
async def loc_list(mes: Message): #journal_log(mes) if not uc.select_id(mes.from_user.id): await mes.answer('Доступ запрещён.') return als_len = len(mes.db.checkall('SELECT * FROM loc WHERE lvl = 99', [])) mines_len = len( mes.db.checkall('SELECT * FROM loc WHERE name LIKE "%Mine%"', [])) ruins_len = len( mes.db.checkall('SELECT * FROM loc WHERE name LIKE "%Ruins%"', [])) forts_len = len( mes.db.checkall( 'SELECT * FROM loc WHERE name IN ("Fort", "Tower", "Outpost")', [])) last_update = mes.db.check( 'SELECT info FROM settings WHERE name = "last_l_check"', [])[0] txt = LOC_LIST_TEXT.format(ruins_len, mines_len, forts_len, als_len, last_update) await mes.answer(txt, reply_markup=loc_keyboard)
async def hero_analyz(mes: Message): # Сбор данных parse = re.search(HERO_PARSE, mes.text) for emblem in list(CASTLE_EMBLEMS): if parse.group('castle') == emblem: castle = CASTLE_EMBLEMS.get(emblem) break else: castle = 'ERROR' if uc.select_id(mes.from_user.id): mes.db.query( 'UPDATE users SET username = ?, nickname = ?, lvl = ?, class = ?, guild_tag = ?, castle = ? WHERE id = ?', [ mes.from_user.username, parse.group('nickname'), int(parse.group('lvl')), parse.group('class'), parse.group('guild_tag'), castle, mes.from_user.id ]) else: mes.db.query( 'INSERT INTO users (id, username, nickname, lvl, class, guild_tag, castle) values (?,?,?,?,?,?,?)', [ mes.from_user.id, mes.from_user.username, parse.group('nickname'), parse.group('lvl'), parse.group('class'), parse.group('guild_tag'), castle ]) # Автоназначение Командира и Админа по умолчанию if mes.chat.id == ADMIN: mes.db.query('UPDATE users SET role = 2 WHERE id = ?', [ADMIN]) elif mes.chat.id == GUILD_MASTER: mes.db.query('UPDATE users SET role = 3 WHERE id = ?', [GUILD_MASTER]) # Update cash uc.loading()
async def trade(mes: Message): #journal_log(mes) if mes.chat.type != 'private': return if not uc.select(**{'id': mes.from_user.id, 'guild_tag': 'AT'}): await mes.answer('Доступ запрещён.') return load = await mes.answer('Запрашиваю, подожди./⏳') await load.edit_text('Запрашиваю, подожди../⌛') await load.edit_text('Запрашиваю, подожди.../⏳') res = uc.select_id(mes.from_user.id).get('trade') if not res: await load.edit_text(TRADE_ANSWER_TEXT.format('Пусто')) return herb_text = '' herb_list = res.split(' ') await main_client.connect() for el in herb_list: async with main_client.conversation(CW_BOT_ID) as conv: time.sleep(float(str(random.uniform(1, 2))[0:4])) await conv.send_message('/t_' + str(el)) answer = await conv.get_response() try: cost = re.search(r'шт. по (\d+)', answer.message).group(1) name = re.search(r'Предложения (\D+) сейчас:', answer.message).group(1) except: x = 'В правилах введён недоступный ресурс.\nПожалуйста поменяйте правило через /gs id, либо обратитесь к @Irrenriel.' await load.edit_text(x) return herb_text += f'<code>{el}</code> | {name} | <a href="https://t.me/share/url?url=/wtb_{el}">{cost}💰</a>\n' await main_client.disconnect() await load.edit_text(TRADE_ANSWER_TEXT.format(herb_text))
async def loc_list_query(query: InlineQuery): if not uc.select_id(query.from_user.id): return mes_text = CALL_DATA_LOC_TYPE_DICT.get('loc_type_cap') res = query.db.checkall( 'SELECT name, lvl, code FROM loc WHERE lvl = 99 ORDER BY name', []) txt = '<u><b>{}</b></u>\n\n'.format(mes_text['text']) for el in res: locs = query.db.checkall( 'SELECT code,name,lvl,working,work_status FROM loc WHERE conqueror = ? ORDER BY lvl', [el[0]]) if not locs: continue txt += '<b>{}{} ({}):</b>\n'.format('⚜🎪 ', el[0], len(locs)) for l in locs: txt += '{}{} lvl.{} [{}{}]\n'.format( LOC_TYPES.get(l[1].split(' ')[-1], 'error'), l[1], str(l[2]), str(l[3]), l[4]) txt += '\n' empty_locs = query.db.checkall( 'SELECT code,name,lvl FROM loc WHERE conqueror = "Forbidden Clan" ORDER BY lvl', []) len_el = len(empty_locs) txt += f'<b>🏴☠ Forbidden Clan ({len_el})</b>{":" if len_el else ""}\n' if len_el: for l in empty_locs: txt += '{}{} lvl.{}</a>\n'.format( LOC_TYPES.get(l[1].split(' ')[-1], 'error'), l[1], str(l[2])) results = [] results.append( InlineQueryResultArticle(id=query.from_user.id, title='🚩Карта', description='Карта мира', input_message_content=InputTextMessageContent( message_text=txt, parse_mode='HTML'))) await query.answer(results=results, cache_time=1, is_personal=True)