from aiogram import types from aiogram.types.chat_permissions import ChatPermissions from aiogram.dispatcher import FSMContext from aiogram.dispatcher.filters import ChatTypeFilter from load import dp, bot, coc_api, config from fsm.base import Verifycation from database.worker import register, check_register from utils.timer import timer_manager @dp.message_handler(ChatTypeFilter(['private']), commands=['start'], state='*') async def verify(message: types.Message): status = await bot.get_chat_member(config['Bot']["chat_id"], message.from_user.id) if status["status"] == "left": await bot.send_message(message.chat.id, "Пошёл нахуй! В чат заходить не учили?") return if check_register(message.from_user.id): await bot.send_message(message.chat.id, "Вы уже прошли верификацию!") return state = dp.current_state(chat=message.chat.id, user=message.from_user.id) await state.finish() await bot.send_message(message.chat.id, "Отправь мне свой тег") await Verifycation.tag.set() @dp.message_handler(state=Verifycation.tag) async def tag_set(message: types.Message, state: FSMContext): await state.update_data(tag=message.text) await bot.send_message( message.chat.id, ("Отправь мне свой токен авторизации\n" "! Владелец или кто-либо не получает доступа к вашему акаунту !\n" "" "Если хотите убедиться в этом, можете посмотреть официальную API, которую использует данный бот") ) await Verifycation.token.set() @dp.message_handler(state=Verifycation.token) async def token_set(message: types.Message, state: FSMContext): chat_id = config['Bot']["chat_id"] await state.update_data(token=message.text) info = await state.get_data() await state.finish() data = coc_api.verify_token(**info) #{'tag': '#TAG', 'token': 'TOKEN', 'status': 'ok'} member = coc_api.get_player(data['tag']) clan_member = member['clan']['tag'] == config['API']['clan_tag'] if clan_member == False: await bot.send_message( message.chat.id, ("Вы не являетесь учасником нашего клана! Ввойдите в клан, чтобы иметь доступ к чату\n" "Вы были кикнуты с чата, вы можете перезайти и пройти проверку повторно!") ) try: await bot.ban_chat_member(chat_id, message.from_user.id) except Exception: pass await bot.unban_chat_member(chat_id, message.from_user.id, only_if_banned=True) return if (data['status'] == 'ok'): await bot.send_message(message.chat.id, "Вы прошли проверку!") register(message.from_user, coc_api.get_player(data['tag'])) group = await bot.get_chat(chat_id) group_permissions = group["permissions"] permissions = ChatPermissions( can_send_messages= group_permissions["can_send_messages"], can_send_media_messages= group_permissions["can_send_media_messages"], can_send_polls= group_permissions["can_send_polls"], can_send_other_messages= group_permissions["can_send_other_messages"], can_add_web_page_previews= group_permissions["can_add_web_page_previews"], can_change_info= group_permissions["can_change_info"], can_invite_users= group_permissions["can_invite_users"], can_pin_messages= group_permissions["can_pin_messages"] ) try: await bot.restrict_chat_member( chat_id=chat_id, user_id=message.from_user.id, permissions=permissions ) except Exception: pass else: await bot.send_message( message.chat.id, ("Вы ввели неверный токен или тег!\n" "Вы были кикнуты с чата, вы можете перезайти и пройти проверку повторно!") ) try: await bot.ban_chat_member(chat_id, message.from_user.id) except Exception: pass await bot.unban_chat_member(chat_id, message.from_user.id, only_if_banned=True) m = timer_manager.cancel_timer(message.from_user.id) if m is not None: await m.delete()