115 lines
4.7 KiB
Python
115 lines
4.7 KiB
Python
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"
|
||
"<a href='https://developer.clashofclans.com/#/documentation'>"
|
||
"Если хотите убедиться в этом, можете посмотреть официальную API, которую использует данный бот</a>")
|
||
)
|
||
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'}
|
||
|
||
members = coc_api.clan_members()
|
||
|
||
clan_member = False
|
||
for i in members['items']:
|
||
if data['tag'] in i['tag']:
|
||
clan_member = True
|
||
break
|
||
|
||
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()
|