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
Exemple #2
0
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:
Exemple #3
0
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)
Exemple #5
0
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:
Exemple #6
0
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"
        "Администрация предпримет все необходимые меры")
Exemple #7
0
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()
Exemple #8
0
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)
Exemple #9
0
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"),
Exemple #10
0
"""Данный файл является аналогом 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 - Начать диалог со мной
Exemple #11
0
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,
Exemple #12
0
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:
Exemple #13
0
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)
Exemple #14
0
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  # айди, который поставил + или -