This repository has been archived on 2024-07-28. You can view files and clone it, but cannot push or open issues or pull requests.
moderator-bot/handlers/groups/main.py

127 lines
3.3 KiB
Python

from load import bot, dp, types
from aiogram import Bot
import config
from aiogram.filters import Command
from filters import MessageReplied
from filters import ChatTypeFilter
from database import Member
from aiogram.filters.chat_member_updated import \
ChatMemberUpdatedFilter, JOIN_TRANSITION, ChatMemberUpdated
@dp.chat_member(
ChatMemberUpdatedFilter(member_status_changed=JOIN_TRANSITION)
)
async def welcome_message(event: ChatMemberUpdated, _bot: Bot):
user = Member.get_or_none(Member.user_id == event.from_user.id)
if (user):
await _bot.send_message(
chat_id=event.chat.id,
text=f"Hi, {user.first_name} again"
)
if not (user):
Member.create(
user_id=event.from_user.id,
first_name=event.from_user.first_name,
username=event.from_user.username,
)
await _bot.send_message(
chat_id=event.chat.id,
text=f"Hi, [{user.first_name}](tg://user?id={user.id})!\n"
"Please, read [chat rules](https://nometa.xyz)"
)
@dp.message(
Command("start", "help"),
ChatTypeFilter("supergroup")
)
async def start_command_group(message: types.Message):
await message.answer((
f"Hi, [{message.from_user.first_name}](tg://user?id={message.from_user.id})!\n"
"My commands:\n"
" /help , /start - read the message\n"
" /me , /bio - member information (if member group)")
)
@dp.message(
Command("leave"),
ChatTypeFilter("supergroup")
)
async def leave_group(message: types.Message):
user = message.from_user
if (message.text.split()[0] != "I UNDERSTAND!"):
await message.answer("use /leave I UNDERSTAND")
return
Member.delete().get(Member.user_id == user.id)
status = await bot.kick_chat_member(
chat_id=message.chat.id,
user_id=user.id,
until_date=None
)
if status:
await message.answer((
f"User [{user.first_name}](tg://user?id={user.id})"
"has leaved chat for forever"
))
Member.delete().where(Member.user_id == user.id).execute()
@dp.message(
Command("bio", "me"),
ChatTypeFilter("supergroup")
)
async def get_information(message: types.Message):
user = Member.get(Member.user_id == message.from_user.id)
await message.answer((
f"[{user.first_name}](tg://user?id={user.user_id}) ({user.role})\n"
f"Warns: {user.warns}/{config.limit_of_warns}"
))
@dp.message(
Command("report"),
MessageReplied(),
ChatTypeFilter("supergroup")
)
async def user_report(message: types.Message):
args = message.text.split()
if (len(args) != 2):
await message.answer("/report (reason)")
return
reported_user = message.reply_to_message.from_user
reporter_user = message.from_user
reason = args[1]
await bot.send_message(
config.second_group_id,
(
"Complaint about: [{}](tg://user?id={})\n"
"Complaint from: [{}](tg://user?id={})\n\n"
"Note: {}\n"
"{}"
).format(
reported_user.first_name,
reported_user.id,
reporter_user.first_name,
reporter_user.id,
reason,
message.reply_to_message.link("link message", as_html=False)
)
)