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()
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"по причине: выиграл в казино")
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()