Example #1
0
from aiogram import types
from aiogram.dispatcher.filters.builtin import CommandHelp

from loader import dp
from utils.misc import rate_limit
from filters import IsPrivate

@rate_limit(5, 'help')
@dp.message_handler(CommandHelp(), IsPrivate())
async def bot_help(message: types.Message):
    text = [
        'Список команд: ',
        '/start - Начать диалог',
        '/me - Отобразить информацию о себе',
        '/help - Получить справку'
    ]
    await message.answer('\n'.join(text))
Example #2
0
from aiogram import types
from loader import dp, bot
import asyncio
from filters import IsPrivate


@dp.message_handler(IsPrivate())
async def bot_echo(message: types.Message):

    message_1_id = message.message_id

    text = [
        f'Прости, друг, я не знаю команды: <b>{message.text}</b>', '',
        'Данные сообщения будут автоматически удалено через несколько секунд'
    ]

    joined_text = '\n'.join(text)

    message_2 = await message.reply(text=joined_text,
                                    parse_mode=types.ParseMode.HTML)

    await asyncio.sleep(5)

    await bot.delete_message(
        chat_id=message.from_user.id,
        message_id=message_2.message_id,
    )
    await bot.delete_message(
        chat_id=message.from_user.id,
        message_id=message_1_id,
    )
Example #3
0
from aiogram import types
from aiogram.dispatcher.filters.builtin import CommandStart
from filters import IsPrivate
from loader import dp
from utils.misc import rate_limit
from utils.db_api import User
import logging


@rate_limit(limit=10)
@dp.message_handler(CommandStart(), IsPrivate())
async def bot_start(message: types.Message, user: User):
    await message.answer(f'Привет, {message.from_user.full_name}!\n'
                         f'Ваши данные: {user.__dict__}')
    # Не попадает в error handler
    try:
        await message.answer("Неверное закрытие <b>тега<b>")
    except Exception as err:
        await message.answer(f"Ошибка: {err}")

    # Попадает в error handler
    # 1/0
    await message.answer("Нет такого <kek>тега</kek>")
    logging.info("Ошибка, бот не упал!")
from aiogram import types
from aiogram.dispatcher import FSMContext
from aiogram.dispatcher.filters.builtin import Command
from aiogram.utils.markdown import hcode

from loader import dp
from utils.db_api import quick_commands as commands
# Добавляем фильтр IsPrivate
from filters import IsPrivate

@dp.message_handler(Command("email"), IsPrivate())
async def bot_start(message: types.Message, state: FSMContext):
    await message.answer("Пришли мне свой имейл")
    await state.set_state("email")


@dp.message_handler(state="email")
async def enter_email(message: types.Message, state: FSMContext):
    email = message.text
    await commands.update_user_email(email=email, id=message.from_user.id)
    user = await commands.select_user(id=message.from_user.id)
    await message.answer("Данные обновлены. Запись в БД: \n" +
                         hcode(f"id={user.id}\n"
                               f"name={user.name}\n"
                               f"email={user.email}"))
    await state.finish()
Example #5
0
"""Данный файл является аналогом basic.py в /groups
Сделанно это для того, чтоб не мешать все в одном хендлере.
Все хендлеры созданы для личных сообщнений и все изменения
будут видны лишь там"""

from aiogram import types
from aiogram.dispatcher.filters import Command
from aiogram.utils.markdown import hbold

from filters import IsPrivate
from keyboards.inline import start_markup
from loader import dp


@dp.message_handler(IsPrivate(), Command("start", prefixes="/"))
async def start(message: types.Message):
    """Хендлер на команду /start
    Приветствует пользователя.
    Используется в личных сообщениях"""

    # Отправляем приветствие
    await message.answer(
        f"Привет, {hbold(message.from_user.full_name)}\n\n"
        "Я простой чат-менеджер с открытым исходным кодом, "
        "который пишется участниками чата по разработке ботов. "
        "Для полного функционала добавь меня в группу ",
        reply_markup=start_markup,
    )


@dp.message_handler(IsPrivate(), Command("help", prefixes="/"))
Example #6
0
from re import compile

from aiogram import types
from aiogram.dispatcher.filters.builtin import CommandStart
from aiogram.utils.deep_linking import get_start_link

from filters import IsPrivate
from loader import dp
from utils.db_api import User
from utils.misc import rate_limit


@rate_limit(limit=10)
@dp.message_handler(CommandStart(deep_link=compile(r"\w+"), encoded=True), IsPrivate())
async def bot_start_deeplink(message: types.Message):
    deep_link_args = message.get_args()

    await message.answer(f'Hi, {message.from_user.full_name}. you have deep link {deep_link_args}!')


# @rate_limit(limit=10)
# @dp.message_handler(CommandStart(deep_link=None), IsPrivate())
# async def bot_start(message: types.Message):
#
#     deep_link = await get_start_link("123", encode=True)
#     await message.answer(f'Hi, {message.from_user.full_name}. '
#                          f'you have no deep link {deep_link}!')


@rate_limit(limit=10)
@dp.message_handler(CommandStart())
Example #7
0
from aiogram import types
from filters import IsPrivate
from loader import dp

from data.config import admins


# только слово secret и только от пользователей-админов попадает
# user_id=32131654 можно передать айди напрямую
@dp.message_handler(IsPrivate(), text='secret', user_id=admins)
async def admin_chat_secret(message: types.Message):
    await message.answer('"Это секретное сообщение вызванное одним из админов')
Example #8
0
from aiogram import types
from aiogram.dispatcher.filters import Command
from loguru import logger

from filters import IsPrivate
from loader import dp


@dp.message_handler(IsPrivate(), Command('quick_guide'))
async def quick_guide(message: types.Message):
    logger.debug(
        f'User @{message.from_user.username}:{message.from_user.id} needs help'
    )
    answer = '\n'.join([
        'Окей, давай по порядку. Для начала, тебе нужно добавить меня в группу. Я думаю с этим ты разберёшься сам',
        'Потом, чтобы я мог кикать спамящих мудаков, мне нужны некоторые права администратора:\n',
        '1) В первую очередь возможность отправлять сообщения, это само собой\n',
        '2) Далее, я думаю ты понимаешь, что у меня должна быть возможность банить пользователя '
        'и это право мне тоже необходимо\n',
        '3) Не будем забывать о лишних сообщениях, которые по-хорошему б удалять, чтобы не было спама. '
        'Так сказать затирать следы. И для этого мне нужна возможность удалять сообщения. '
        'Я думаю ты понимаешь, что делать\n',
        'Завершив это, я смогу кикать тех, кто не способен нажать на кнопку, и в твоём чате не будет ботов'
    ])
    await message.answer(text=answer)
Example #9
0
    intro = State()
    no_person_in_db = State()
    show_profile_or_stats = State()
    showing_person_data = State()
    showing_statistics = State()
    edit_profile = State()
    choose_what_to_edit = State()
    edit_value_selected_before = State()
    input_device_is_selected = State()
    platform_is_selected = State()
    account_is_selected = State()
    account_is_entered = State()


# при нажатии /me
@dp.message_handler(Command('me'), IsPrivate())
async def command_me(message: types.Message, state: FSMContext):
    logger.info(
        f'Пользователь {message.from_user.full_name} (ID: {message.from_user.id}) нажал команду ME'
    )
    text = 'Привет, друг! Подожди буквально пару секунд, я проверю, зарегистрирован ли ты в базе данных...'
    main_message = await message.answer(text=text)
    async with state.proxy() as data:
        data['main_message_id'] = main_message.message_id
    await types.ChatActions.typing()
    await asyncio.sleep(1)
    db = DB()
    tg_account = db.get_tg_account(tg_id=message.from_user.id)
    if db.is_person_exists(tg_account):  # если пользователь уже есть в БД
        logger.info('Пользователь уже был зарегистрирован ранее в БД')
        text = [
Example #10
0
from aiogram import types
from filters import IsPrivate
from loader import dp
from data.config import ADMINS


@dp.message_handler(IsPrivate(), text="secret", user_id=ADMINS)
async def admin_chat_secret(message: types.Message):
    await message.answer("Ты админ лови секрет!")
Example #11
0
from re import compile

from aiogram import types
from aiogram.dispatcher.filters.builtin import CommandStart
from aiogram.utils.deep_linking import get_start_link

from filters import IsPrivate
from loader import dp


@dp.message_handler(CommandStart(deep_link=compile(r"\d\d\d")), IsPrivate())
async def bot_start_deeplink(message: types.Message):
    deep_link_args = message.get_args()
    await message.answer(f'Привет, {message.from_user.full_name}!\n'
                         f'Вы находитесь в личной переписке. \n'
                         f'В вашей команде есть диплинк. \n'
                         f'Вы передали аргумент {deep_link_args}. \n')


@dp.message_handler(CommandStart(), IsPrivate())
async def bot_start(message: types.Message):
    bot_user = await dp.bot.get_me()
    # deep_link = f"http://t.me/{bot_user.username}?start=123"
    deep_link = await get_start_link("123")
    await message.answer(f'Привет, {message.from_user.full_name}!\n'
                         f'Вы на ходитесь в личной переписке. \n'
                         f'В вашей команде нет диплинка. \n'
                         f'Ваша диплинк ссылка - {deep_link}. \n')
Example #12
0
from loader import dp
from aiogram import types
from aiogram.dispatcher import FSMContext
from aiogram.dispatcher.filters import Text
from filters import IsPrivate
import logging


logger = logging.getLogger(__name__)


# Прервать любой их хэндлеров
@dp.message_handler(IsPrivate(), state='*', commands=['cancel', 'отмена'])
@dp.message_handler(IsPrivate(), Text(equals=['cancel', 'отмена'], ignore_case=True), state='*')
async def cancel_handler(message: types.Message, state: FSMContext):
    """
    Прерывание любого их хэндлеров
    """
    logger.info(f'Пользователь {message.from_user.full_name} (ID: {message.from_user.id}) нажал команду ОТМЕНА')
    await state.finish()
    await message.reply('Cancelled.', reply_markup=types.ReplyKeyboardRemove())

Example #13
0
from aiogram import types

from filters import IsPrivate
from loader import dp


@dp.message_handler(IsPrivate(), user_id=[222974391], text='secret')
async def admin_chat_secret(message: types.Message):
    await message.answer('Это секретное сообщение, вызванное одним из администраторов в личной переписке')
Example #14
0
from aiogram import types
from filters import IsPrivate
from loader import dp


@dp.message_handler(IsPrivate(), user_id=[321846604], text="admin")
@dp.message_handler(IsPrivate(), user_id=[321846604], text="secret")
async def admin_chat_secret(message: types.Message):
    await message.answer("Это секретное сообщение вызванное одним из администраторов"
                         "в личной переписке")