- Класс types.Message модуля aiogram
- Методы, которые позволяют отправлять сообщения
- Различия между send_message, answer и reply
- Пример готового бота, который умеет отправлять сообщения
- Отправка других типов контента с помощью бота
- Пример реализации бота с возможностью отправки разного типа контента
- Примеры ботов, работающих с сообщениями
- Бот, удаляющий два последних сообщения в чате
- Бот, который в ответ на пересланное из другого чата сообщения, отправляет url ссылку на исходное сообщение
- Бот — фильтр ненормативной лексики
Класс types.Message модуля aiogram
Класс types.Message
является основным классом в библиотеке aiogram для представления сообщений в Telegram. Он содержит различные методы и атрибуты для работы с сообщениями.
Некоторые из наиболее часто используемых атрибутов и методов класса `types.Message`:
message_id
: Уникальный идентификатор сообщения.from_user
: Объектtypes.User
, представляющий отправителя сообщения.date
: Дата и время отправки сообщения.chat
: Объект `types.Chat`, представляющий чат, в котором было отправлено сообщение.forward_from
: Объектtypes.User
, представляющий отправителя оригинального сообщения, если оно было переслано.forward_from_chat
: Объектtypes.Chat
, представляющий чат, из которого было переслано оригинальное сообщение, если оно было переслано из группы или канала.forward_from_message_id
: Идентификатор оригинального сообщения, если оно было переслано.text
: Текст сообщения.entities
: Список объектовtypes.MessageEntity
, представляющих различные сущности в тексте сообщения, такие как упоминания пользователей, хэштеги и т.д.reply_to_message
: Объектtypes.Message
, представляющий сообщение, на которое данное сообщение является ответом.reply_markup
: Объект `types.InlineKeyboardMarkup` или `types.ReplyKeyboardMarkup`, представляющий клавиатуру, привязанную к сообщению.delete()
: Метод для удаления сообщения.edit_text()
: Метод для редактирования текста сообщения.reply()
: Метод для отправки ответного сообщения.
Методы, которые позволяют отправлять сообщения
Для отправки текстового сообщения в библиотеке aiogram можно использовать несколько методов. Некоторые из них:
bot.send_message(chat_id, text)
: Этот метод позволяет отправить текстовое сообщение в указанный чат. Необходимо указать идентификатор чата (chat_id
) и текст сообщения (text
).
Пример использования:
await bot.send_message(chat_id, "Привет, мир!")
message.answer(text)
, который позволяет отправить ответное сообщение на текущее сообщение. Этот метод является альтернативой методуmessage.reply(text)
.
Пример использования:
await message.answer("Спасибо за ваше сообщение!")
Метод message.answer()
автоматически определяет идентификатор чата и идентификатор сообщения, на которое нужно ответить, поэтому вам не нужно указывать их явно.
message.reply(text)
: Этот метод позволяет отправить ответное сообщение на текущее сообщение. Необходимо указать текст ответного сообщения (text
).
Пример использования:
await message.reply("Спасибо за ваше сообщение!")
<strong>message.edit_text(text)</strong>
: Этот метод позволяет отредактировать текст текущего сообщения. Необходимо указать новый текст сообщения (text
).
Пример использования:
await message.edit_text("Новый текст сообщения")
<strong>bot.send_message(chat_id, text, reply_to_message_id)</strong>
: Этот метод позволяет отправить текстовое сообщение в указанный чат в качестве ответа на другое сообщение. Необходимо указать идентификатор чата (chat_id
), текст сообщения (text
) и идентификатор сообщения, на которое данное сообщение будет ответом (reply_to_message_id
).
Пример использования:
await bot.send_message(chat_id, "Ответ на ваше сообщение", reply_to_message_id=message_id)
Различия между send_message, answer и reply
Метод bot.send_message
отправляет сообщение в произвольный чат, который указывается в параметре chat_id
. Метод answer()
, позволяет отправить сообщение в ответ на предыдущее сообщение в текущем чате. При этом, сообщение, на которое дается ответ не пересылается. Метод reply()
, позволяет отправить сообщение в ответ на предыдущее сообщение в текущем чате. Cообщение, на которое дается ответ также отправляется.
Пример готового бота, который умеет отправлять сообщения
from aiogram import Bot, Dispatcher, types
from aiogram.contrib.fsm_storage.memory import MemoryStorage
# Установите токен вашего бота
BOT_TOKEN = 'YOUR_BOT_TOKEN'
bot = Bot(token=BOT_TOKEN)
dp = Dispatcher(bot, storage=MemoryStorage())
@dp.message_handler(commands=['start'])
async def handle_start(message: types.Message):
# Отправляем приветственное сообщение
await message.reply('Привет! Я бот. Как дела?')
@dp.message_handler(commands=['help'])
async def handle_help(message: types.Message):
# Отправляем сообщение с инструкциями по использованию бота
help_message = """
Привет! Я бот.
Вот некоторые доступные команды:
- /start: Начать взаимодействие с ботом
- /help: Получить справку о командах бота
"""
await message.reply(help_message)
@dp.message_handler()
async def handle_message(message: types.Message):
# Отправляем эхо-ответ на полученное сообщение
await message.reply(f'Вы отправили сообщение: {message.text}')
if __name__ == '__main__':
from aiogram import executor
executor.start_polling(dp, skip_updates=True)
В этом примере бот будет отвечать на команды /start
и /help
, а также на любые другие текстовые сообщения, отправленные пользователем. При получении команды /start
он отправит приветственное сообщение, а при получении команды /help
отправит справку о командах бота. Для всех остальных сообщений бот отправит эхо-ответ с содержимым полученного сообщения.
Просто замените 'YOUR_BOT_TOKEN'
на фактический токен вашего бота, запустите скрипт, и ваш бот будет готов к работе. Вы можете добавить дополнительные команды и функциональность, чтобы адаптировать его под свои потребности.
Отправка других типов контента с помощью бота
В библиотеке aiogram вы можете отправлять различные типы контента помимо простого текста. Вот некоторые из наиболее распространенных типов контента, которые вы можете отправлять с помощью aiogram:
1. Фотографии: Метод send_photo
используется для отправки фотографий. Вы можете указать путь к файлу фотографии на вашем сервере или использовать URL-адрес изображения в Интернете. Пример использования:
await bot.send_photo(chat_id, photo=open('photo.jpg', 'rb'), caption='Красивая фотография')
2. Аудио: Метод send_audio
используется для отправки аудиофайлов. Вы можете указать путь к файлу аудио или использовать URL-адрес аудиофайла в Интернете. Пример использования:
await bot.send_audio(chat_id, audio=open('audio.mp3', 'rb'), caption='Музыкальный трек')
3. Документы: Метод `send_document` используется для отправки документов. Вы можете указать путь к файлу документа на вашем сервере или использовать URL-адрес документа в Интернете. Пример использования:
await bot.send_document(chat_id, document=open('document.pdf', 'rb'), caption='PDF-документ')
4. Видео: Метод send_video
используется для отправки видеофайлов. Вы можете указать путь к файлу видео или использовать URL-адрес видеофайла в Интернете. Пример использования:
await bot.send_video(chat_id, video=open('video.mp4', 'rb'), caption='Видео-ролик')
5. Голосовые сообщения: Метод send_voice
используется для отправки голосовых сообщений. Вы можете указать путь к файлу голосового сообщения на вашем сервере или использовать URL-адрес голосового сообщения в Интернете. Пример использования:
await bot.send_voice(chat_id, voice=open('voice.ogg', 'rb'), caption='Голосовое сообщение')
Пример реализации бота с возможностью отправки разного типа контента
from aiogram import Bot, Dispatcher, types
from aiogram.contrib.fsm_storage.memory import MemoryStorage
# Установите токен вашего бота
BOT_TOKEN = 'YOUR_BOT_TOKEN'
bot = Bot(token=BOT_TOKEN)
dp = Dispatcher(bot, storage=MemoryStorage())
@dp.message_handler(commands=['start'])
async def handle_start(message: types.Message):
# Отправляем приветственное сообщение
await message.reply('Привет! Я бот. Как дела?')
@dp.message_handler(commands=['text'])
async def handle_text(message: types.Message):
# Отправляем текстовое сообщение
await message.reply('Пример текстового сообщения')
@dp.message_handler(commands=['video'])
async def handle_video(message: types.Message):
# Отправляем видеофайл
await bot.send_video(message.chat.id, video=open('video.mp4', 'rb'))
@dp.message_handler(commands=['audio'])
async def handle_audio(message: types.Message):
# Отправляем аудиофайл
await bot.send_audio(message.chat.id, audio=open('audio.mp3', 'rb'))
@dp.message_handler(commands=['document'])
async def handle_document(message: types.Message):
# Отправляем документ
await bot.send_document(message.chat.id, document=open('document.pdf', 'rb'))
@dp.message_handler(commands=['photo'])
async def handle_photo(message: types.Message):
# Отправляем фотографию
await bot.send_photo(message.chat.id, photo=open('photo.jpg', 'rb'))
@dp.message_handler(commands=['voice'])
async def handle_voice(message: types.Message):
# Отправляем голосовое сообщение
await bot.send_voice(message.chat.id, voice=open('voice.ogg', 'rb'))
if __name__ == '__main__':
from aiogram import executor
executor.start_polling(dp, skip_updates=True)
В этом примере бот реагирует на различные команды (/start
, /text
, /video
, /audio
, /document
, /photo
, /voice
). Когда пользователь отправляет одну из этих команд, бот отправляет соответствующий контент в ответ.
Просто замените 'YOUR_BOT_TOKEN'
на фактический токен вашего бота, а также укажите пути к файлам видео, аудио, документа, фотографии и голосового сообщения. После этого запустите скрипт, и ваш бот будет готов к работе. Вы можете добавить дополнительные команды и функциональность, чтобы адаптировать его под свои потребности.
Примеры ботов, работающих с сообщениями
Бот, удаляющий два последних сообщения в чате
from aiogram import Bot, Dispatcher, types
from aiogram.contrib.fsm_storage.memory import MemoryStorage
# Установите токен вашего бота
BOT_TOKEN = 'YOUR_BOT_TOKEN'
bot = Bot(token=BOT_TOKEN)
dp = Dispatcher(bot, storage=MemoryStorage())
@dp.message_handler(commands=['delete_last'])
async def handle_delete_last(message: types.Message):
# Получаем информацию о чате
chat_id = message.chat.id
# Получаем список последних двух сообщений в чате
messages = await bot.get_chat_history(chat_id, limit=2)
# Удаляем последние два сообщения
for message_data in messages:
await bot.delete_message(chat_id, message_data.message_id)
if __name__ == '__main__':
from aiogram import executor
executor.start_polling(dp, skip_updates=True)
В этом примере бот реагирует на команду /delete_last
. Когда пользователь отправляет эту команду, бот получает информацию о чате, а затем получает список последних двух сообщений в этом чате с помощью метода bot.get_chat_history()
. Затем бот использует метод bot.delete_message()
для удаления каждого из этих двух сообщений.
Просто замените 'YOUR_BOT_TOKEN'
на фактический токен вашего бота. Запустите скрипт, и ваш бот будет готов к работе. Когда пользователь отправляет команду /delete_last
, бот удалит два последних сообщения из чата.
Обратите внимание, что для удаления сообщений боту требуется разрешение на удаление сообщений в чате. Убедитесь, что ваш бот имеет соответствующие права и находится в чате, где он может выполнять операции удаления сообщений.
Бот, который в ответ на пересланное из другого чата сообщения, отправляет url ссылку на исходное сообщение
from aiogram import Bot, Dispatcher, types
from aiogram.contrib.fsm_storage.memory import MemoryStorage
# Установите токен вашего бота
BOT_TOKEN = 'YOUR_BOT_TOKEN'
bot = Bot(token=BOT_TOKEN)
dp = Dispatcher(bot, storage=MemoryStorage())
@dp.message_handler(content_types=types.ContentTypes.TEXT)
async def handle_text(message: types.Message):
# Проверяем, является ли сообщение пересланным
if message.forward_from_chat:
# Получаем информацию об исходном чате и сообщении
forward_chat_id = message.forward_from_chat.id
forward_message_id = message.forward_from_message_id
# Создаем URL-ссылку на исходное сообщение
forward_url = f'https://t.me/c/{forward_chat_id}/{forward_message_id}'
# Отправляем URL-ссылку в ответ на пересланное сообщение
await message.reply(f'Исходное сообщение: {forward_url}')
if __name__ == '__main__':
from aiogram import executor
executor.start_polling(dp, skip_updates=True)
В этом примере бот проверяет, является ли полученное сообщение пересланным. Если это так, бот извлекает информацию об исходном чате и сообщении из свойства forward_from_chat
и forward_from_message_id
. Затем он создает URL-ссылку на исходное сообщение с помощью полученной информации. В ответ на пересланное сообщение, бот отправляет URL-ссылку, которая ведет к исходному чату и сообщению.
Просто замените 'YOUR_BOT_TOKEN'
на фактический токен вашего бота. Запустите скрипт, и ваш бот будет готов к работе. Когда пользователь пересылает сообщение из другого чата, бот отправляет URL-ссылку на исходный чат и исходное сообщение в ответ.
Бот — фильтр ненормативной лексики
from aiogram import Bot, Dispatcher, types
from aiogram.contrib.fsm_storage.memory import MemoryStorage
# Установите токен вашего бота
BOT_TOKEN = 'YOUR_BOT_TOKEN'
bot = Bot(token=BOT_TOKEN)
dp = Dispatcher(bot, storage=MemoryStorage())
# Список запрещенных слов
forbidden_words = ['ругаться', 'оскорблять', 'ненормативная_лексика']
@dp.message_handler()
async def handle_message(message: types.Message):
text = message.text.lower()
# Проверяем наличие запрещенных слов в сообщении
if any(word in text for word in forbidden_words):
# Отправляем предупреждение
await message.reply('В чате нельзя ругаться!')
if __name__ == '__main__':
from aiogram import executor
executor.start_polling(dp, skip_updates=True)
В этом примере бот реагирует на все сообщения в чате и проверяет наличие запрещенных слов из списка forbidden_words
в тексте сообщения. Если хотя бы одно из запрещенных слов обнаружено, бот отправляет предупреждение о недопустимости ругательства.
Просто замените 'YOUR_BOT_TOKEN'
на фактический токен вашего бота и расширьте список forbidden_words
в соответствии с вашими требованиями. Запустите скрипт, и ваш бот будет готов к мониторингу сообщений и отправке предупреждений о ненормативной лексике.