Example #1
0
async def delete_hamster(message: types.Message, state: FSMContext):
    sticker_sets = [set_name for (set_name, ) in db.select_all_sets()]
    if message.sticker.set_name in sticker_sets:
        await message.delete()

        async with state.proxy() as data:
            if not data.get("Sticker Flood"):
                data["Sticker Flood"] = 1
            else:
                data["Sticker Flood"] += 1
                if data["Sticker Flood"] >= 3:
                    try:
                        await message.chat.restrict(
                            user_id=message.from_user.id,
                            permissions=set_user_ro_permissions(),
                            until_date=datetime.datetime.now() +
                            datetime.timedelta(minutes=int(10)),
                        )
                    except Exception as err:
                        pass
                    await message.answer(
                        f"{message.from_user.get_mention(as_html=True)} забанен на 10 мин "
                        f"за плохие стикеры.")

                    data["Sticker Flood"] = 0

                    # я обиделся

                    return
        await message.answer(
            f"{message.from_user.get_mention(as_html=True)}! Ща забаню сука.")
async def read_only_mode(message: types.Message):
    """Хендлер с фильтром в группе, где можно использовать команду !ro ИЛИ /ro
    :time int: время на которое нужно замутить пользователя в минутах
    :reason str: причина мута. При отсуствии времени и/или причины, то
    используються стандартные значения: 5 минут и None для времени и причины соответсвенно"""

    # Создаем переменные для удобства
    admin_username, admin_mentioned, chat_id, member_id, member_username, member_mentioned = get_members_info(
        message)

    # Разбиваем команду на аргументы с помощью RegExp
    command_parse = re.compile(r"(!ro|/ro) ?(\d+)? ?([\w+\D]+)?")
    parsed = command_parse.match(message.text)
    time = parsed.group(2)
    reason = parsed.group(3)
    # Проверяем на наличие и корректность срока RO
    if not time:
        time = 5
    else:
        if int(time) < 1:
            time = 1
    # Проверяем на наличие причины
    if not reason:
        reason = "без указания причины"
    else:
        reason = f"по причине: {reason}"
    # Получаем конечную дату, до которой нужно замутить
    until_date = datetime.datetime.now() + datetime.timedelta(
        minutes=int(time))

    try:
        # Пытаемся забрать права у пользователя
        await message.chat.restrict(
            user_id=member_id,
            permissions=set_user_ro_permissions(),
            until_date=until_date,
        )

        # Отправляем сообщение
        await message.answer(f"Пользователю {member_mentioned} "
                             f"было запрещено писать на {time} минут "
                             f"администратором {admin_mentioned} {reason} ")

        # Вносим информацию о муте в лог
        logger.info(
            f"Пользователю @{member_username} запрещено писать сообщения до {until_date} админом @{admin_username}"
        )

    # Если бот не может замутить пользователя (администратора), возникает ошибка BadRequest которую мы обрабатываем
    except BadRequest:
        # Отправляем сообщение
        await message.answer(
            f"Пользователь {member_mentioned} "
            "является администратором чата, я не могу выдать ему RO")
        # Вносим информацию о муте в лог
        logger.info(f"Бот не смог замутить пользователя @{member_username}")
    service_message = await message.reply(
        f"Сообщение самоуничтожится через 5 секунд.")
    await asyncio.sleep(5)
    # после прошедших 5 секунд, бот удаляет сообщение от администратора и от самого бота
    await message.delete()
    await service_message.delete()
    await message.reply_to_message.delete()
Example #3
0
async def win_or_loss(message: types.Message):
    if message.dice.emoji != "🎰":
        return

    value = message.dice.value
    slots = {
        1: {
            "values": ("bar", "bar", "bar"),
            "time": 10,
            "prize": "3X BAR"
        },
        22: {
            "values": ("grape", "grape", "grape"),
            "time": 15,
            "prize": "🍇🍇🍇"
        },
        43: {
            "values": ("lemon", "lemon", "lemon"),
            "time": 20,
            "prize": "🍋🍋🍋"
        },
        64: {
            "values": ("seven", "seven", "seven"),
            "time": 25,
            "prize": "🔥JACKPOT🔥"
        },
    }

    if value not in slots:
        await asyncio.sleep(2.35)
        return await message.delete()

    time = slots[value]["time"]
    prize = slots[value]["prize"]

    if message.forward_from:
        time += time
        prize += " а так же жульничал"

    until_date = datetime.datetime.now() + datetime.timedelta(
        minutes=int(time))
    username = message.from_user.username
    name = message.from_user.get_mention(as_html=True)

    try:
        await asyncio.sleep(1.67)
        await message.chat.restrict(
            user_id=message.from_user.id,
            permissions=set_user_ro_permissions(),
            until_date=until_date,
        )

        await message.answer(f"Пользователь {name} "
                             f"выбил {prize} и получил "
                             f"RO на {time} минут.\n"
                             f"Поздравляем!")

    except BadRequest:
        await message.answer(
            f"Администратор чата {name} выиграл в казино {prize}")

        logger.info(f"Бот не смог замутить пользователя @{username} ({name})"
                    f"по причине: выиграл в казино")
    else:
        logger.info(
            f"Пользователю @{username} ({name}) запрещено писать сообщения до {until_date} "
            f"по причине: выиграл в казино")
Example #4
0
async def win_or_loss(message: types.Message):
    if message.dice.emoji != '🎰':
        return

    value = message.dice.value
    slots = {
        1: ("bar", "bar", "bar"),
        22: ("grape", "grape", "grape"),
        43: ("lemon", "lemon", "lemon"),
        64: ("seven", "seven", "seven"),
    }

    for i in slots:
        if value == i:
            if i == 1:
                time = 10
                prize = "3X BAR"
            elif i == 22:
                time = 15
                prize = "🍇🍇🍇"
            elif i == 43:
                time = 20
                prize = "🍋🍋🍋"
            else:
                time = 25
                prize = "🔥JACKPOT🔥"

            if message.forward_from:
                time += time
                prize += " а так же жульничал"

            until_date = datetime.datetime.now() + datetime.timedelta(
                minutes=int(time))
            username = message.from_user.username
            name = message.from_user.get_mention(as_html=True)

            try:
                await asyncio.sleep(1.67)
                await message.chat.restrict(
                    user_id=message.from_user.id,
                    permissions=set_user_ro_permissions(),
                    until_date=until_date,
                )
                print(set_user_ro_permissions())

                await message.answer(f"Пользователь {name} "
                                     f"выбил {prize} и получил "
                                     f"RO на {time} минут.\n"
                                     f"Поздравляем!")
            except BadRequest:
                await message.answer(f"Администратор чата {name} "
                                     f"выиграл в казино {prize}")

                logger.info(
                    f"Бот не смог замутить пользователя @{username} ({name})"
                    f"по причине: выиграл в казино")
            else:
                logger.info(
                    f"Пользователю @{username} ({name}) запрещено писать сообщения до {until_date} "
                    f"по причине: выиграл в казино")
                break
        else:
            pass
    else:
        await asyncio.sleep(2.35)
        await message.delete()