Exemple #1
0
async def mute_user(message, user_id, chat_id, time_val, no_msg=False):
    real_chat_id = message.chat.id

    await update_admin_cache(real_chat_id)

    if str(user_id) in WHITELISTED:
        await message.reply("This user is whitelisted")
        return

    if user_id == BOT_ID:
        await message.reply(
            get_string("bans", "bot_cant_be_muted", real_chat_id))
        return False
    if await is_user_admin(chat_id, user_id) is None:
        await message.reply(get_string("bans", "user_admin_mute",
                                       real_chat_id))
        return False

    try:
        await bot.restrict_chat_member(chat_id,
                                       user_id,
                                       permissions=ChatPermissions(
                                           can_send_messages=False,
                                           until_date=time_val))
    except (NotEnoughRightsToRestrict, BadRequest):
        await message.reply(
            get_string("bans", "user_cannot_be_muted", real_chat_id))
        return False

    return True
Exemple #2
0
async def process_callback_kb1btn1(callback_query: types.CallbackQuery):
    code = callback_query.data
    chat_id = callback_query.message.chat.id
    member_id = callback_query.from_user.id
    user_title = callback_query.from_user.mention
    debug_id = f'{callback_query.message.chat.username}-({user_title})'
    chat_title = callback_query.message.chat.title
    log.info(f'{debug_id}: {code}')
    _id = f'{callback_query.message.message_id}-{callback_query.message.chat.id}'
    try:
        pass_item = data_store.get_captcha(_id)
    except KeyError:
        log.error(f'Something gone wrong: {data_store} {_id}')
        await bot.answer_callback_query(callback_query.id,
                                        text=s('something_gone_wrong_warn',
                                               {'lang': 'ru'}))
        return
    if not pass_item.user_check(callback_query.from_user.id):
        await bot.answer_callback_query(callback_query.id,
                                        text=s('not_for_you_warn',
                                               {'lang': 'ru'}))
        return
    text = pass_item.new_char(code[-1:])
    result = pass_item.check()
    if result is CAPTCHA_STATE.INPUTING:
        await bot.answer_callback_query(callback_query.id, text=text)
    elif result is CAPTCHA_STATE.SUCSSES:
        data_store.remove_captcha(_id)
        log.info(f'{debug_id}: SUCSSES')
        await bot.answer_callback_query(callback_query.id, text='SUCSSES')
        try:
            pass_item.messages.pop(MESSAGE_TYPES.LOGIN)
        except KeyError:
            pass
        await clear(pass_item)
        await bot.send_message(
            callback_query.message.chat.id,
            s('success_msg', {
                'lang': 'ru',
                'user_title': user_title,
                'chat_title': chat_title
            }))
        unmute = ChatPermissions(can_send_messages=True,
                                 can_send_media_messages=True,
                                 can_add_web_page_previews=True,
                                 can_send_other_messages=True,
                                 can_send_polls=True)
        await bot.restrict_chat_member(chat_id, member_id, permissions=unmute)
    else:
        data_store.remove_captcha(_id)
        delay = datetime.now() + timedelta(minutes=1)
        log.info(f'{debug_id}: FAIL, ban until {delay}')
        # workaround to send new event.
        await bot.kick_chat_member(chat_id, member_id, delay)
        await bot.answer_callback_query(callback_query.id,
                                        text=s('fail_msg', {'lang': 'ru'}))
        await clear(pass_item)
        # await bot.unban_chat_member(chat_id, member_id)

    data_store.sync()
Exemple #3
0
async def mute_user(chat_id, user_id, until_date=None):
    await bot.restrict_chat_member(chat_id,
                                   user_id,
                                   permissions=ChatPermissions(
                                       can_send_messages=False,
                                       until_date=until_date),
                                   until_date=until_date)
    return True
Exemple #4
0
async def restrict_user(chat_id, user_id, until_date=None):
    await bot.restrict_chat_member(chat_id,
                                   user_id,
                                   permissions=ChatPermissions(
                                       can_send_messages=True,
                                       can_send_media_messages=False,
                                       can_send_other_messages=False,
                                       can_add_web_page_previews=False,
                                       until_date=until_date),
                                   until_date=until_date)
    return True
Exemple #5
0
async def capcha(message: types.Message):
    mute = ChatPermissions(can_send_messages=False,
                           can_send_media_messages=False,
                           can_add_web_page_previews=False,
                           can_send_other_messages=False,
                           can_send_polls=False)
    my_id = (await bot.me).id
    for member in message.new_chat_members:
        # Do not touch yourself
        if member.id == my_id:
            continue
        if member.is_bot:
            await bot.send_message(message.chat.id,
                                   text=s('join_bot_msg', {'lang': 'ru'}),
                                   reply_to_message_id=message.message_id)
            continue
        # mute user
        user_title = member.mention
        debug_id = f'{message.chat.username}-{user_title}'
        log.info(f'{debug_id}: Start capcha')
        try:
            await bot.restrict_chat_member(message.chat.id, member.id, permissions=mute)
        except NotEnoughRightsToRestrict as e:
            log.info(f'{debug_id} can\'t restrict member : {e}')
            continue

        input_file, inline_kb_full, btn_pass = base_capthca('ru')
        sent_message = await bot.send_photo(message.chat.id, input_file,
                                            caption=s(
                                                'join_msg', {'lang': 'ru', 'user_title': user_title}),
                                            reply_markup=inline_kb_full,
                                            reply_to_message_id=message.message_id)
        _id = f'{sent_message.message_id}-{sent_message.chat.id}'
        expired_time = datetime.now() + timedelta(minutes=5)
        pass_item = PassStorage(
            btn_pass, member.id, sent_message.chat.id, sent_message.message_id, expired_time)
        pass_item.add_message_id(MESSAGE_TYPES.LOGIN, message.message_id)
        pass_item.add_message_id(
            MESSAGE_TYPES.CAPTCHA, sent_message.message_id)
        data_store.new_captcha(_id, pass_item)
        data_store.sync()
Exemple #6
0
async def lock_cmd(message, chat, strings):
    chat_id = chat['chat_id']
    chat_title = chat['chat_title']

    if (args := message.get_args().split(' ', 1)) == ['']:
        await message.reply(strings['no_lock_args'])
        return

    async for lock, status in lock_parser(chat_id, rev=True):
        if args[0] == lock[0]:
            if status is True:
                await message.reply(strings['already_locked'])
                continue

            to_lock = {lock[1]: False}
            new_perm = ChatPermissions(**to_lock)
            await bot.set_chat_permissions(chat_id, new_perm)
            await message.reply(strings['locked_successfully'].format(
                lock=lock[0], chat=chat_title))


@register(cmds="unlock",
          user_can_restrict_members=True,
          bot_can_restrict_members=True)
@chat_connection()
@get_strings_dec('locks')
async def unlock_cmd(message, chat, strings):
    chat_id = chat['chat_id']
    chat_title = chat['chat_title']

    if (args := message.get_args().split(' ', 1)) == ['']:
Exemple #7
0
    'А вам, сударь, на броневичек-с!',
    'Мама мыла раму!',
    'Ты сделал все что мог!',
    'С вашего счета списано 100$.',
    'Таки зачем ви это делаете?',
    'Грустно...',
    'Лифт не приедет.',
    'Ваш звонок очень важен для нас!',
    'Вы успешно зарегистрированы на интеллектуальное соревнование. Соперник - хаса.',
    'В упорной битве интеллектуалов ты с минимальным преимуществом побеждаешь хасу!',
    'В упорной битве интеллектуалов ты с минимальным преимуществом уступаешь хасе!',
    '',
]

RESTRICT_PERMISSIONS = ChatPermissions(can_send_messages=False,
                                       can_send_media_messages=False,
                                       can_send_other_messages=False)
ALLOW_PERMISSIONS = ChatPermissions(can_send_messages=True,
                                    can_send_media_messages=True,
                                    can_send_other_messages=True)


def get_keyboard(user_id: int) -> InlineKeyboardMarkup:
    kb = InlineKeyboardMarkup()
    kb.row_width = 5
    answers = list(range(5))

    random.shuffle(answers)

    buttons = []
Exemple #8
0
import random
from typing import List

from aiogram.types.chat_permissions import ChatPermissions
from aiogram.types import InlineKeyboardMarkup, InlineKeyboardButton


RESTRICT_PERMISSIONS = ChatPermissions(
        can_send_messages=False,
        can_send_media_messages=False,
        can_send_other_messages=False
    )
ALLOW_PERMISSIONS = ChatPermissions(
        can_send_messages=True,
        can_send_media_messages=True,
        can_send_other_messages=True,
        can_add_web_page_previews=True,
        can_send_polls=True,
        can_invite_users=True,
        can_pin_messages=True,
        can_change_info=True
    )


def get_keyboard(user_id: int, button_options: List[str]) -> InlineKeyboardMarkup:
    kb = InlineKeyboardMarkup()
    # kb.row_width = 5

    random.shuffle(button_options)

    row = []