2022-11-06 03:48:10 -05:00
from load import bot , dp , types
2022-08-07 04:45:35 -04:00
from aiogram . types . chat_permissions import ChatPermissions
import config
2022-11-06 03:48:10 -05:00
from database import Member , Restriction
from database import MemberRoles
2022-08-07 04:45:35 -04:00
2022-12-01 05:54:32 -05:00
from utils import get_command_args , get_argument , parse_timedelta_from_message
2022-08-07 04:45:35 -04:00
2022-08-16 06:28:08 -04:00
2022-12-01 05:54:32 -05:00
@dp.message_handler (
commands = [ " ban " , " sban " ] ,
commands_prefix = " ! " ,
available_roles = [ MemberRoles . HELPER , MemberRoles . ADMIN ]
)
2022-08-07 04:45:35 -04:00
async def ban_user ( message : types . Message ) :
2022-12-01 05:54:32 -05:00
command = await get_command_args ( message )
2022-11-28 14:27:41 -05:00
2022-11-06 03:48:10 -05:00
to_user = command . to_user
from_user = command . from_user
2022-08-07 04:45:35 -04:00
# If can't descibe user data
2022-11-06 03:48:10 -05:00
if ( not to_user ) or ( not from_user ) :
2022-08-07 04:45:35 -04:00
await message . answer ( (
2022-11-06 03:48:10 -05:00
" Usage: !ban (@username|id) reason=None \n "
" Reply to a message or use with a username " )
2022-08-07 04:45:35 -04:00
)
return
# Ban user and save (bool)
2022-11-06 03:48:10 -05:00
status = await bot . kick_chat_member ( chat_id = message . chat . id , user_id = to_user . user_id , until_date = None )
2022-08-07 04:45:35 -04:00
2022-11-28 14:27:41 -05:00
if status and ( not command . is_silent ) :
2022-11-06 03:48:10 -05:00
await message . answer ( f " [ { from_user . first_name } ](tg://user?id= { from_user . user_id } ) has banned [ { to_user . first_name } ](tg://user?id= { to_user . user_id } ) " , parse_mode = " Markdown " )
2022-08-07 04:45:35 -04:00
# Open restrict
2022-11-06 03:48:10 -05:00
Restriction . create (
from_user = from_user ,
to_user = to_user ,
2022-12-01 05:54:32 -05:00
text = message . text ,
message_id = message . message_id
2022-11-06 03:48:10 -05:00
)
2022-08-07 04:45:35 -04:00
2022-12-01 05:54:32 -05:00
@dp.message_handler (
commands = [ " unban " , " sunban " ] ,
commands_prefix = " ! " ,
available_roles = [ MemberRoles . HELPER , MemberRoles . ADMIN ]
)
2022-08-07 04:45:35 -04:00
async def unban_user ( message : types . Message ) :
2022-12-01 05:54:32 -05:00
command = await get_command_args ( message )
2022-11-06 03:48:10 -05:00
to_user = command . to_user
from_user = command . from_user
2022-08-07 04:45:35 -04:00
# If can't descibe user data
2022-11-06 03:48:10 -05:00
if ( not to_user ) or ( not from_user ) :
2022-08-07 04:45:35 -04:00
await message . answer ( (
2022-11-06 03:48:10 -05:00
" Usage: !unban (@username|id) reason=None \n "
" Reply to a message or use with username/id " )
2022-08-07 04:45:35 -04:00
)
return
2022-12-01 05:54:32 -05:00
# Unban user and set status
2022-11-06 03:48:10 -05:00
status = await bot . unban_chat_member ( chat_id = message . chat . id , user_id = to_user . user_id )
2022-08-07 04:45:35 -04:00
2022-11-28 14:27:41 -05:00
if status and ( not command . is_silent ) :
2022-11-06 03:48:10 -05:00
await message . answer ( f " [ { from_user . first_name } ](tg://user?id= { from_user . user_id } ) has unbanned [ { to_user . first_name } ](tg://user?id= { to_user . user_id } ) " , parse_mode = " Markdown " )
2022-12-01 05:54:32 -05:00
Restriction . create (
from_user = from_user ,
to_user = to_user ,
text = message . text ,
message_id = message . message_id
2022-11-06 03:48:10 -05:00
)
2022-12-01 05:54:32 -05:00
@dp.message_handler (
commands = [ " info " ] ,
commands_prefix = " ! " ,
available_roles = [ MemberRoles . HELPER , MemberRoles . ADMIN ]
)
2022-11-06 03:48:10 -05:00
async def info_user ( message : types . Message ) :
2022-12-01 05:54:32 -05:00
command = await get_command_args ( message )
2022-11-06 03:48:10 -05:00
to_user = command . to_user
if ( not to_user ) :
await message . answer ( (
" Usage: !info (@username|id) \n "
" Reply to a message or use with username/id " )
)
return
2022-08-07 04:45:35 -04:00
2022-11-06 03:48:10 -05:00
await message . answer ( (
f " [ { to_user . first_name } ](tg://user?id= { to_user . user_id } ) ( { to_user . role } ) \n "
f " Warns: { to_user . warns } / { config . limit_of_warns } " ) ,
parse_mode = " Markdown "
)
2022-08-16 06:28:08 -04:00
2022-12-01 05:54:32 -05:00
@dp.message_handler (
commands = [ " kick " , " skick " ] ,
commands_prefix = " ! " ,
available_roles = [ MemberRoles . HELPER , MemberRoles . ADMIN ]
)
async def kick_user ( message : types . Message ) :
command = await get_command_args ( message )
2022-11-06 03:48:10 -05:00
to_user = command . to_user
from_user = command . from_user
2022-08-07 04:45:35 -04:00
2022-11-06 03:48:10 -05:00
if ( not to_user ) or ( not from_user ) :
2022-08-07 04:45:35 -04:00
await message . answer ( (
2022-11-06 03:48:10 -05:00
" Usage: !kick (@username|id) reason=None \n "
" Reply to a message or use with a username/id " )
2022-08-07 04:45:35 -04:00
)
return
2022-11-06 03:48:10 -05:00
status1 = await bot . kick_chat_member ( chat_id = message . chat . id , user_id = to_user . user_id , until_date = None )
status2 = await bot . unban_chat_member ( chat_id = message . chat . id , user_id = to_user . user_id )
2022-11-28 14:27:41 -05:00
if ( not status1 and status2 ) and ( not command . is_silent ) :
2022-11-06 03:48:10 -05:00
await message . answer ( f " [ { from_user . first_name } ](tg://user?id= { from_user . user_id } ) has kicked [ { to_user . first_name } ](tg://user?id= { to_user . user_id } ) " , parse_mode = " Markdown " )
2022-08-07 04:45:35 -04:00
2022-11-06 03:48:10 -05:00
Restriction . create (
from_user = from_user ,
to_user = to_user ,
2022-12-01 05:54:32 -05:00
text = message . text ,
message_id = message . message_id
2022-11-06 03:48:10 -05:00
)
2022-08-16 06:28:08 -04:00
2022-08-07 04:45:35 -04:00
2022-12-01 05:54:32 -05:00
@dp.message_handler (
commands = [ " mute " , " smute " ] ,
commands_prefix = " ! " ,
available_roles = [ MemberRoles . ADMIN ]
)
2022-08-07 04:45:35 -04:00
async def mute_user ( message : types . Message ) :
2022-12-01 05:54:32 -05:00
command = await get_command_args ( message )
2022-08-07 04:45:35 -04:00
2022-11-06 03:48:10 -05:00
to_user = command . to_user
from_user = command . from_user
2022-08-07 04:45:35 -04:00
2022-12-01 05:54:32 -05:00
duration = await parse_timedelta_from_message ( message )
2022-11-06 03:48:10 -05:00
if ( not to_user ) or ( not from_user ) :
2022-08-07 04:45:35 -04:00
await message . answer ( (
2022-11-06 03:48:10 -05:00
" Usage:!mute (@username|id) (duration) \n "
" Reply to a message or use with a username/id " )
2022-08-07 04:45:35 -04:00
)
return
permissions = ChatPermissions ( can_send_messages = False )
status = await bot . restrict_chat_member (
chat_id = message . chat . id ,
2022-11-06 03:48:10 -05:00
user_id = to_user . user_id ,
until_date = duration ,
2022-08-07 04:45:35 -04:00
permissions = permissions
)
2022-11-06 03:48:10 -05:00
2022-11-28 14:27:41 -05:00
if status and ( not command . is_silent ) :
2022-12-01 05:54:32 -05:00
await message . answer ( f " [ { from_user . first_name } ](tg://user?id= { from_user . user_id } ) has muted [ { to_user . first_name } ](tg://user?id= { to_user . user_id } ) " , parse_mode = " Markdown " )
2022-11-06 03:48:10 -05:00
Restriction . create (
from_user = from_user ,
to_user = to_user ,
2022-12-01 05:54:32 -05:00
text = message . text ,
message_id = message . message_id
2022-11-06 03:48:10 -05:00
)
2022-08-16 06:28:08 -04:00
2022-08-07 04:45:35 -04:00
2022-12-01 05:54:32 -05:00
@dp.message_handler (
commands = [ " unmute " , " sunmute " ] ,
commands_prefix = " ! " ,
available_roles = [ MemberRoles . ADMIN ]
)
2022-08-07 04:45:35 -04:00
async def umute_user ( message : types . Message ) :
# Get information
2022-12-01 05:54:32 -05:00
command = await get_command_args ( message )
2022-11-06 03:48:10 -05:00
to_user = command . to_user
from_user = command . from_user
2022-08-07 04:45:35 -04:00
# If can't
2022-11-06 03:48:10 -05:00
if ( not to_user ) or ( not from_user ) :
2022-08-07 04:45:35 -04:00
await message . answer ( (
2022-08-16 06:28:08 -04:00
" Usage:!unmute (@username|id) reason=None. \n "
2022-08-07 04:45:35 -04:00
" Reply to a message or use with a username/id. " )
)
return
# Get chat permissions
2022-08-16 06:28:08 -04:00
group_permissions = config . group_permissions
2022-08-07 04:45:35 -04:00
# Set permissions
permissions = ChatPermissions (
2022-12-01 05:54:32 -05:00
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 " ]
2022-08-07 04:45:35 -04:00
)
# Restrict user and save
status = await bot . restrict_chat_member (
chat_id = message . chat . id ,
2022-11-06 03:48:10 -05:00
user_id = to_user . user_id ,
2022-08-07 04:45:35 -04:00
permissions = permissions
)
2022-11-28 14:27:41 -05:00
if status and ( not command . is_silent ) :
2022-11-06 03:48:10 -05:00
await message . answer ( f " [ { from_user . first_name } ](tg://user?id= { from_user . user_id } ) has unmuted [ { to_user . first_name } ](tg://user?id= { to_user . user_id } ) " , parse_mode = " Markdown " )
2022-08-07 04:45:35 -04:00
2022-12-01 05:54:32 -05:00
@dp.message_handler (
commands = [ " pin " ] ,
commands_prefix = " ! " ,
available_roles = [ MemberRoles . HELPER , MemberRoles . ADMIN ]
)
async def pin_message ( message : types . Message ) :
2022-08-07 04:45:35 -04:00
await bot . pin_chat_message ( message . chat . id , message . reply_to_message . message_id )
2022-12-01 05:54:32 -05:00
@dp.message_handler (
commands = [ " readonly " , " ro " ] ,
commands_prefix = " ! " ,
available_roles = [ MemberRoles . ADMIN ]
)
async def readonly_mode ( message : types . Message ) :
2022-08-16 06:28:08 -04:00
group_permissions = config . group_permissions
2022-11-27 14:38:22 -05:00
status = config . group_permissions [ ' can_send_messages ' ]
2022-11-28 14:27:41 -05:00
2022-11-27 14:38:22 -05:00
if ( status ) :
await message . answer ( " 🔕 Readonly mode enabled! " )
2022-08-07 04:45:35 -04:00
chat_permissions = ChatPermissions (
2022-12-01 05:54:32 -05:00
can_send_messages = not status
2022-08-07 04:45:35 -04:00
)
else :
2022-11-27 14:38:22 -05:00
await message . answer ( " 🔔 Readonly mode disabled! " )
2022-08-07 04:45:35 -04:00
chat_permissions = ChatPermissions (
2022-12-01 05:54:32 -05:00
can_send_messages = group_permissions [ ' can_send_messages ' ] ,
can_send_media_messages = group_permissions [ " can_send_media_messages " ] ,
can_send_other_messages = group_permissions [ ' can_send_other_messages ' ] ,
can_send_polls = group_permissions [ ' can_send_polls ' ] ,
can_invite_users = group_permissions [ ' can_invite_users ' ] ,
can_change_info = group_permissions [ ' can_change_info ' ] ,
can_add_web_page_previews = group_permissions [ ' can_add_web_page_previews ' ] ,
can_pin_messages = group_permissions [ ' can_pin_messages ' ]
2022-08-07 04:45:35 -04:00
)
2022-11-27 14:38:22 -05:00
config . group_permissions [ " can_send_messages " ] = not status
2022-12-01 05:54:32 -05:00
await bot . set_chat_permissions ( chat_id = message . chat . id , permissions = chat_permissions )
2022-08-16 06:28:08 -04:00
2022-12-01 05:54:32 -05:00
@dp.message_handler (
commands = [ " warn " , " w " ] ,
commands_prefix = " ! " ,
available_roles = [ MemberRoles . HELPER , MemberRoles . ADMIN ]
)
2022-08-07 04:45:35 -04:00
async def warn_user ( message : types . Message ) :
# Get information
2022-12-01 05:54:32 -05:00
command = await get_command_args ( message )
2022-08-07 04:45:35 -04:00
2022-11-06 03:48:10 -05:00
to_user = command . to_user
from_user = command . from_user
if ( not to_user ) or ( not from_user ) :
2022-08-07 04:45:35 -04:00
await message . answer ( (
2022-11-06 03:48:10 -05:00
" Usage: !warn (@username|id) reason=None \n "
" Reply to a message or use with username/id " )
2022-08-07 04:45:35 -04:00
)
return
2022-11-06 03:48:10 -05:00
to_user . warns + = 1
to_user . save ( )
2022-08-07 04:45:35 -04:00
2022-11-06 03:48:10 -05:00
await message . answer ( f " [ { from_user . first_name } ](tg://user?id= { from_user . user_id } ) has warned [ { to_user . first_name } ](tg://user?id= { to_user . user_id } ) ( { to_user . warns } / { config . limit_of_warns } ) " , parse_mode = " Markdown " )
2022-08-07 04:45:35 -04:00
2022-11-06 03:48:10 -05:00
if ( to_user . warns == config . limit_of_warns ) :
await message . answer ( f " [ { to_user . first_name } ](tg://user?id= { to_user . user_id } ) has been banned! " , parse_mode = " Markdown " )
await bot . kick_chat_member ( chat_id = message . chat . id , user_id = to_user . user_id , until_date = None )
2022-12-01 05:54:32 -05:00
2022-11-06 03:48:10 -05:00
Restriction . create (
from_user = from_user ,
2022-12-01 05:54:32 -05:00
to_user = to_user ,
text = message . text ,
message_id = message . message_id
2022-11-06 03:48:10 -05:00
)
2022-08-07 04:45:35 -04:00
2022-08-16 06:28:08 -04:00
2022-12-01 05:54:32 -05:00
@dp.message_handler (
commands = [ " reload " ] ,
commands_prefix = " ! "
)
async def reload ( message : types . Message ) :
2023-01-04 15:14:32 -05:00
from utils import reload_users_data
await reload_users_data ( )
2022-08-07 04:45:35 -04:00
2022-11-06 03:48:10 -05:00
await message . answer ( " Reloaded! " )
2022-08-07 04:45:35 -04:00
2022-12-01 05:54:32 -05:00
@dp.message_handler (
commands = [ " setrole " ] ,
commands_prefix = " ! " ,
available_roles = [ MemberRoles . ADMIN ]
)
2022-08-07 04:45:35 -04:00
async def set_role ( message : types . Message ) :
2022-12-01 05:54:32 -05:00
command = await get_command_args ( message )
new_role = get_argument ( command . arguments )
2022-08-16 06:28:08 -04:00
2022-11-06 03:48:10 -05:00
to_user = command . to_user
from_user = command . from_user
2022-08-07 04:45:35 -04:00
2022-11-06 03:48:10 -05:00
if ( not to_user ) or ( not from_user ) or ( not new_role ) :
2022-08-16 06:28:08 -04:00
await message . answer ( (
2022-11-06 03:48:10 -05:00
" !setrole (@username|id) role(owner,admin,helper,member). \n "
2022-08-16 06:28:08 -04:00
" Reply to a message or use with username. "
) )
2022-08-07 04:45:35 -04:00
return
2022-12-01 05:54:32 -05:00
2022-08-16 06:28:08 -04:00
if not ( new_role in [ member . value for member in MemberRoles ] ) :
2022-11-06 03:48:10 -05:00
await message . answer ( f " Role { new_role } not exists " )
2022-08-07 04:45:35 -04:00
return
2022-08-16 06:28:08 -04:00
2022-11-06 03:48:10 -05:00
if ( from_user . user_id == to_user . user_id ) :
await message . answer ( " ❌ You can ' t set role yourself " )
2022-08-07 04:45:35 -04:00
return
2022-11-06 03:48:10 -05:00
to_user . role = new_role
to_user . save ( )
2022-12-01 05:54:32 -05:00
await message . answer ( f " { new_role . capitalize ( ) } role set for \
[ { to_user . first_name } ] ( tg : / / user ? id = { to_user . user_id } ) " ,parse_mode= " Markdown " )