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))
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, )
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()
"""Данный файл является аналогом 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="/"))
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())
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('"Это секретное сообщение вызванное одним из админов')
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)
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 = [
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("Ты админ лови секрет!")
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')
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())
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('Это секретное сообщение, вызванное одним из администраторов в личной переписке')
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("Это секретное сообщение вызванное одним из администраторов" "в личной переписке")