import asyncio import datetime import re from aiogram import types from aiogram.dispatcher.filters import Command from aiogram.utils.exceptions import BadRequest from loguru import logger from data.permissions import user_ro, user_allowed, no_media from filters import IsGroup from loader import bot, dp @dp.message_handler( IsGroup(), regexp=r"(!ro|/ro) ?(\d+)? ?([\w+\D]+)?", is_reply=True, user_can_restrict_members=True, ) async def read_only_mode(message: types.Message): """Хендлер с фильтром в группе, где можно использовать команду !ro ИЛИ /ro :time int: время на которое нужно замутить пользователя в минутах :reason str: причина мута. При отсуствии времени и/или причины, то используються стандартные значения: 5 минут и None для времени и причины соответсвенно""" # Создаем переменные для удобства admin_username = message.from_user.username admin_mentioned = message.from_user.get_mention(as_html=True) member_id = message.reply_to_message.from_user.id
from data.config import ENTRY_TIME from data.config import BAN_TIME from data.permissions import new_user_added from data.permissions import user_allowed from filters import IsGroup from keyboards.inline import generate_confirm_markup from keyboards.inline import confirming_callback from loader import bot from loader import dp from loader import storage from states import ConfirmUserState from utils.misc import users_entrance_generator @dp.message_handler(IsGroup(), content_types=types.ContentTypes.NEW_CHAT_MEMBERS) async def new_chat_member(message: types.Message): """ Обрабатываем вход нового пользователя """ logger.debug( f"New chat member: @{message.from_user.username}:{message.from_user.id} -> " f"{', '.join([f'@{user.username}:{user.id}' for user in message.new_chat_members])} " f'in chat "{message.chat.title}@{message.chat.username}" chat_id:{message.chat.id}' ) # Пропускаем старые запросы if message.date < datetime.datetime.now() - datetime.timedelta(minutes=1): return logger.debug('Old updates was skipped') for new_member in message.new_chat_members:
import io from aiogram import types from aiogram.dispatcher.filters import AdminFilter, Command from loguru import logger from filters import IsGroup from loader import dp @dp.message_handler(IsGroup(), AdminFilter(), Command("set_photo", prefixes="!/")) async def set_new_photo(message: types.Message): source_message = message.reply_to_message photo = source_message.photo[-1] photo = await photo.download(destination=io.BytesIO()) input_file = types.InputFile(photo) try: await message.chat.set_photo(photo=input_file) await message.reply("Фотка была успешна обновлена.") except Exception as err: logger.exception(err) @dp.message_handler(IsGroup(), AdminFilter(), Command("set_title", prefixes="!/")) async def set_new_title(message: types.Message): source_message = message.reply_to_message title = source_message.text # Вариант 1
import io from aiogram import types from aiogram.dispatcher.filters import AdminFilter, Command from loguru import logger from filters import IsGroup from loader import dp @dp.message_handler(IsGroup(), AdminFilter(), Command("set_photo", prefixes="!/")) async def set_new_photo(message: types.Message): source_message = message.reply_to_message photo = source_message.photo[-1] photo = await photo.download(destination=io.BytesIO()) input_file = types.InputFile(photo) try: await message.chat.set_photo(photo=input_file) await message.reply("Фотка была успешна обновлена.") except Exception as err: logger.exception(err) @dp.message_handler(IsGroup(), AdminFilter(), Command("set_title", prefixes="!/")) async def set_new_title(message: types.Message): source_message = message.reply_to_message title = source_message.text # Вариант 1 # await bot.set_chat_title(message.chat.id, title=title)
import datetime import re import aiogram import asyncio from aiogram import types from aiogram.dispatcher.filters import Command from filters import IsGroup, AdminFilter from loader import dp @dp.message_handler(IsGroup(), Command("ro", prefixes="!"), AdminFilter()) async def ro_command(message: types.message): member = message.reply_to_message.from_user member_id = member.id chat_id = message.chat.id command_parse = re.compile(r"(!ro) ?(\d+)? ?([\w+\D]+)?") parsed = command_parse.match(message.text) time = parsed.group(2) comment = parsed.group(3) time = int(time) until_date = datetime.datetime.now() + datetime.timedelta(minutes=time) try: await message.chat.restrict(user_id=member_id, can_send_messages=False, until_date=until_date) # await message.reply_to_message.delete() except aiogram.utils.exceptions.BadRequest as err:
import time import asyncio from aiogram import types, exceptions from aiogram.dispatcher.filters import Command from aiogram.utils.markdown import hlink from filters import IsGroup, IsReplyFilter from loguru import logger from loader import dp, db report_command = Command("report", prefixes={"/", "!"}) @dp.message_handler(IsGroup(), IsReplyFilter(True), report_command) async def report_user(message: types.Message): """Отправляет жалобу на пользователя админам""" reply = message.reply_to_message # Проверка на то что реплай сообщение написано от имени канала if reply.sender_chat and reply.is_automatic_forward is None: mention = reply.sender_chat.title else: mention = reply.from_user.get_mention() chat_id = message.chat.id await message.answer( f"Репорт на пользователя {mention} успешно отправлен.\n" "Администрация предпримет все необходимые меры")
from aiogram import types from aiogram.dispatcher.filters import Command from filters import IsGroup from loader import dp, bot, db @dp.message_handler(IsGroup(), Command(commands=["myscore"], prefixes="/")) def my_score(message: types.Message): """ Отправляет количество очков пользователя """ member_id = message.from_user.id username, score = db.get_score_user(member_id)[0] if score > 0: text = "У @{username} - {score} баллов" else: text = "У @{username} пока что нет баллов" await message.answer(text) await message.delete()
from aiogram.dispatcher.filters import IsReplyFilter from aiogram.types import Message, Chat from async_lru import alru_cache from filters import IsGroup from loader import db, dp, bot from utils.misc import rate_limit from utils.misc.rating import caching_rating, get_rating @rate_limit(limit=30, key='rating', text="Вы не можете так часто начислять рейтинг. (<i>Сообщение автоматически удалится</i>") @dp.message_handler( IsGroup(), IsReplyFilter(True), text=["+", "-"]) async def add_rating_handler(m: Message): helper_id = m.reply_to_message.from_user.id # айди хелпера user_id = m.from_user.id # айди, который поставил + или - message_id = m.reply_to_message.message_id if m.bot.id == helper_id or user_id == helper_id: return await m.delete() cached = caching_rating(helper_id, user_id, message_id) if not cached: return await m.delete() mention_reply = m.reply_to_message.from_user.get_mention(m.reply_to_message.from_user.first_name, True)
import asyncio import datetime from aiogram import types from aiogram.utils.exceptions import BadRequest from loguru import logger from data.permissions import set_user_ro_permissions from filters import IsGroup from loader import dp @dp.message_handler(IsGroup(), content_types=types.ContentType.DICE) 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"),
"""Данный файл является аналогом basic.py в /private Сделанно это для того, чтоб не мешать все в одном хендлере. Все хендлеры созданы для групп и все изменения будут видны лишь там.""" from aiogram import types from aiogram.dispatcher.filters import Command from aiogram.utils.markdown import hbold from filters import IsGroup from loader import dp @dp.message_handler(IsGroup(), Command("start", prefixes="!/")) async def start(message: types.Message): """Хендлер на команду !/start Выводит список комманд из-за ненужности информации в группе, которая находиться в приветствии""" # Выводим список комманд await help_cmd(message) @dp.message_handler(IsGroup(), Command("help", prefixes="!/")) async def help_cmd(message: types.Message): """Хендлер на команду /help Выводит список комманд.""" # Создаем текст text = """{header1} /start - Начать диалог со мной
import re from aiogram import types from aiogram.dispatcher.filters import Command from aiogram.utils.exceptions import BadRequest from loguru import logger from data.permissions import (set_new_user_approved_permissions, set_no_media_permissions, set_user_ro_permissions) from filters import IsGroup from loader import bot, db, dp @dp.message_handler( IsGroup(), regexp=r"(!ro|/ro) ?(\d+)? ?([\w+\D]+)?", is_reply=True, user_can_restrict_members=True, ) async def read_only_mode(message: types.Message): """Хендлер с фильтром в группе, где можно использовать команду !ro ИЛИ /ro :time int: время на которое нужно замутить пользователя в минутах :reason str: причина мута. При отсуствии времени и/или причины, то используються стандартные значения: 5 минут и None для времени и причины соответсвенно""" # Создаем переменные для удобства ( admin_username, admin_mentioned, chat_id,
from aiogram import types from aiogram.dispatcher.filters import Command from aiogram.types import ReplyKeyboardRemove from aiogram.utils.exceptions import BadRequest from filters import IsGroup from loader import dp from loguru import logger @dp.message_handler(IsGroup(), Command(commands=["banmepls"], prefixes="/")) async def ban_me(message: types.Message): member_id = message.from_user.id member_fullname = message.from_user.full_name try: await message.chat.kick(user_id=member_id, until_date=datetime.timedelta(minutes=60)) logger.info(f"Пользователь {member_fullname} был забанен!") await message.answer( f'Пользовтаель {member_fullname} был забанен по собественному желанию!' ) except BadRequest:
import io import logging from aiogram import types from aiogram.dispatcher.filters import AdminFilter, Command from filters import IsGroup from loader import dp @dp.message_handler(IsGroup(), AdminFilter(), Command("set_photo")) async def set_new_photo(message: types.Message): source_message = message.reply_to_message photo = source_message.photo[-1] photo = await photo.download(destination=io.BytesIO()) input_file = types.InputFile(photo) try: await message.chat.set_photo(photo=input_file) await message.reply("Фото было успешно обновлено.") except Exception as err: logging.exception(err) @dp.message_handler(IsGroup(), AdminFilter(), Command("set_title")) async def set_new_title(message: types.Message): source_message = message.reply_to_message title = source_message.text # Вариант 1 # await bot.set_chat_title(message.chat.id, title=title)
import asyncio import random from aiogram.dispatcher.filters import IsReplyFilter from aiogram.types import Message, Chat from async_lru import alru_cache from filters import IsGroup from loader import db, dp, bot from utils.misc import rate_limit from utils.misc.rating import caching_rating, get_rating @dp.message_handler(IsGroup(), text='/reset_rating', user_id=362089194) async def reset_rating_handler(m: Message): db.drop_table('RatingUsers') db.create_table_rating_users() await m.reply('Готово') @rate_limit( limit=30, key='rating', text= "Вы не можете так часто начислять рейтинг. (<i>Сообщение автоматически удалится</i>" ) @dp.message_handler(IsGroup(), IsReplyFilter(True), text=["+", "-"]) async def add_rating_handler(m: Message): helper_id = m.reply_to_message.from_user.id # айди хелпера user_id = m.from_user.id # айди, который поставил + или -