Init
This commit is contained in:
2
handlers/__init__.py
Normal file
2
handlers/__init__.py
Normal file
@@ -0,0 +1,2 @@
|
||||
from . import group
|
||||
from . import private
|
3
handlers/group/__init__.py
Normal file
3
handlers/group/__init__.py
Normal file
@@ -0,0 +1,3 @@
|
||||
from . import main
|
||||
from . import users
|
||||
from . import captcha
|
52
handlers/group/captcha.py
Normal file
52
handlers/group/captcha.py
Normal file
@@ -0,0 +1,52 @@
|
||||
from aiogram import types
|
||||
from aiogram.types.chat_permissions import ChatPermissions
|
||||
|
||||
from load import dp, bot, config
|
||||
from keyboards.inline.keyboard import verify_button
|
||||
from utils.timer import timer_manager, KickTimer
|
||||
|
||||
|
||||
|
||||
async def captcha_kick_user(message: types.Message, chat_id: int, user_id:int):
|
||||
print("asdasdasd")
|
||||
try:
|
||||
await bot.ban_chat_member(chat_id=chat_id, user_id=user_id)
|
||||
except Exception: pass
|
||||
await bot.unban_chat_member(chat_id, user_id, only_if_banned=True)
|
||||
await message.delete()
|
||||
try:
|
||||
await bot.send_message(user_id, "Время вышло!")
|
||||
except Exception: pass
|
||||
state = dp.current_state(chat=user_id, user=user_id)
|
||||
await state.finish()
|
||||
|
||||
|
||||
@dp.message_handler(is_chat=True, content_types=["new_chat_members"])
|
||||
async def on_join(message: types.Message):
|
||||
user_id = message.from_user.id
|
||||
chat_id = message.chat.id
|
||||
|
||||
try:
|
||||
await bot.restrict_chat_member(
|
||||
chat_id=chat_id,
|
||||
user_id=user_id,
|
||||
permissions=ChatPermissions(can_send_messages=False)
|
||||
)
|
||||
except Exception: return
|
||||
|
||||
hello_message = (
|
||||
"Привет, <a href='tg://user?id={user_id}'>{name}</a>! "
|
||||
"Для того чтобы удостоверится что ты наш игрок, мы попросим пройти верификацию!\n"
|
||||
"<b>У вас есть 2 минуты на прохождение верификации!</b>"
|
||||
)
|
||||
|
||||
me = await bot.get_me()
|
||||
captcha_message = await bot.send_message(
|
||||
message.chat.id,
|
||||
hello_message.format(user_id=user_id, name=message.from_user.first_name),
|
||||
reply_markup=verify_button(message.from_user, me.username)
|
||||
)
|
||||
timer_manager.add_timer(user_id, captcha_message, KickTimer(int(config['Bot']['verify_timeout']), captcha_kick_user,
|
||||
args=[captcha_message, chat_id, user_id]))
|
||||
#Timer(int(config['Bot']['verify_timeout']), captcha_kick_user, args=[captcha_message, chat_id, user_id])
|
||||
await message.delete()
|
12
handlers/group/main.py
Normal file
12
handlers/group/main.py
Normal file
@@ -0,0 +1,12 @@
|
||||
from aiogram import types
|
||||
|
||||
from load import dp, bot, config
|
||||
from database.worker import delete
|
||||
|
||||
|
||||
@dp.message_handler(is_chat=True, content_types=['left_chat_member'])
|
||||
async def on_left(message: types.Message):
|
||||
user_id = message.from_user.id
|
||||
delete(user_id)
|
||||
await message.delete()
|
||||
|
18
handlers/group/users.py
Normal file
18
handlers/group/users.py
Normal file
@@ -0,0 +1,18 @@
|
||||
from aiogram import types
|
||||
|
||||
from load import bot, dp
|
||||
from database.worker import get_users
|
||||
|
||||
|
||||
@dp.message_handler(is_chat=True, commands=['get'])
|
||||
async def get_users_info(message: types.Message):
|
||||
text = ''
|
||||
users = get_users()
|
||||
if users is not None:
|
||||
for p in users:
|
||||
text += ("<a href='tg://user?id={user_id}'>{first_name}</a> ({nickname} <code>{tag}</code>)\n").format(
|
||||
user_id=p['user_id'], first_name=p['first_name'], nickname=p['nickname'], tag=p['tag']
|
||||
)
|
||||
await bot.send_message(message.chat.id, text)
|
||||
else:
|
||||
await bot.send_message(message.chat.id, "Ничего не найдено!")
|
1
handlers/private/__init__.py
Normal file
1
handlers/private/__init__.py
Normal file
@@ -0,0 +1 @@
|
||||
from . import register
|
114
handlers/private/register.py
Normal file
114
handlers/private/register.py
Normal file
@@ -0,0 +1,114 @@
|
||||
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()
|
Reference in New Issue
Block a user