Если при помощи python-telegram-bot
планируется только вести Telegram-канал (например, публиковать анонсы новых статей сайта или их обновления), то ставить полностью библиотеку со всеми зависимостями не обязательно. Достаточно установить чистый интерфейс Python для Telegram Bot API python-telegram-bot-raw
.
Так как TelegramBot нужен для ведения Telegram-канала, следовательно он не будет принимать каких либо сообщений, а будет только отправлять, удалять или редактировать уже отправленные сообщения в Telegram-канал. Для таких задач высокоуровневый интерфейс расширения telegram.ext
не нужен. Расширение telegram.ext
в основном используется для удобной обработки входящих сообщений, создания вебхука или регулярных обновлений бота и т.д.
Для начала необходимо создать Telegram-канал:
Создать канал
.Создать канал
.После этого Telegram предложит написать имя канала, заполнить описание и поставить аватарку. Заполнять описание и выбирать картинку на этом этапе не обязательно, а вот без названия дальше работать с каналом не получится. Обратите внимание, что имя канала, описание и аватарку можно изменить в любой момент.
Затем выбираем тип канала: публичный или частный:
Выбираем публичный, придумываем и вводим ссылку, по которой можно будет попасть на канал. Эта ссылка, также служит в качестве chat_id
, на нее отправляются новые сообщения.
Далее создаем бота для отправки сообщений в созданный канал, для этого общаемся с @BotFather
.
Осталось только добавить этого бота в качестве администратора канала (для Desktop клиента):
Примечание:
- Добавить бота может только создатель канала.
- Другие администраторы не могут добавлять ботов в каналы.
- Канал может быть публичным или частным (не имеет значения)
Например, есть сайт. При публикации очередной статьи/материала можно выполнять представленный ниже код, для отправки сообщения в Telegram-канал. Полученный в результате отправки номер сообщения можно хранить в БД сайта, для случаев редактирования или удаления статьи/материала сайта (отправки сообщения в канал об обновлении статьи или ее удаления).
# код для python-telegram-bot-raw версии 13.x import telegram TOKEN = '...' bot = telegram.Bot(token=TOKEN) # ссылка_канала - это придуманная вами ссылка # Telegram-канала (t.me/ссылка_канала) chanell = '@ссылка_канала' text="Первое сообщение!" send = bot.send_message(chat_id=chanell, text=text) print(f'Номер отправленного сообщения: {send.message_id}')
После отправки сообщения, объект send
будет содержать номер сообщения send.message_id
в контексте этого канала. Этот номер можно использовать для редактирования или удаления отправленного сообщения.
Дополнительно смотрите аргументы, которые принимает метод
bot.send_message()
.
Для того, чтобы отредактировать отправленное сообщение в Telegram-канале, необходим его порядковый номер message_id
в контексте этого канала, полученный при его отправке.
# код для python-telegram-bot-raw версии 13.x import telegram TOKEN = '...' bot = telegram.Bot(token=TOKEN) # ссылка_канала - это придуманная вами ссылка # Telegram-канала (t.me/ссылка_канала) chanell = '@ссылка_канала' # порядковый номер, полученный при отправке сообщения message_id = 2 new_text="Измененное сообщение." try: # возвращает то-же самое, что и `bot.send_message()` edit = bot.edit_message_text(chat_id=chanell, message_id=message_id, text=new_text) except telegram.error.BadRequest: edit = None if edit: print(f'Сообщение {message_id} отредактировано.') else: print(f'Сообщение {message_id} не найдено.')
Метод bot.edit_мessage_text()
используется для редактирования текстовых и игровых сообщений. В случае успеха, если отредактированное сообщение не является встроенным сообщением, возвращается отредактированное сообщение, в противном случае возвращается True
.
Для того, чтобы удалить сообщение в Telegram-канале, необходим его порядковый номер message_id
в контексте этого канала, полученный при его отправке.
Внимание! Сообщение может быть удалено ботом только в том случае, если оно было отправлено менее 48 часов назад. После 48 часов сообщение может удалить только реальный пользователь (администратор канала), вручную.
# код для python-telegram-bot-raw версии 13.x import telegram TOKEN = '...' bot = telegram.Bot(token=TOKEN) # ссылка_канала - это придуманная вами ссылка # Telegram-канала (t.me/ссылка_канала) chanell = '@ссылка_канала' # порядковый номер, полученный при отправке сообщения message_id = 2 try: delete = bot.delete_message(chat_id=chanell, message_id=message_id) except telegram.error.BadRequest: delete = None if delete: print(f'Сообщение {message_id} удалено.') else: print(f'Сообщение {message_id} не найдено.')
Метод bot.delete_message()
используется для удаления сообщения, в том числе служебного, со следующими ограничениями:
can_post_messages
могут удалять исходящие сообщения в каналах.can_delete_messages
в супергруппе или канале, он может удалить там любое сообщение.Возвращает True
в случае успеха.
Для того, чтобы закрепить/открепить сообщение в Telegram-канале, необходим его порядковый номер message_id
в контексте этого канала, полученный при его отправке.
bot.pin_chat_message(chat_id, message_id)
- закрепляет сообщение для пользователей канала;bot.unpin_chat_message(chat_id, message_id)
- открепляет сообщение для пользователей канала.Используйте эти методы, чтобы добавить сообщение в список закрепленных сообщений в чате или открепить его. Если чат не является приватным, бот должен быть администратором в чате и должен иметь права администратора 'canpinmessages'.
Пример закрепления сообщения в канале Telegram:
# код для python-telegram-bot-raw версии 13.x import telegram TOKEN = '...' bot = telegram.Bot(token=TOKEN) # ссылка_канала - это придуманная вами ссылка # Telegram-канала (t.me/ссылка_канала) chanell = '@ссылка_канала' # порядковый номер, полученный при отправке сообщения message_id = 2 try: pin = bot.pin_chat_message(chat_id=chanell, message_id=message_id) except telegram.error.BadRequest: pin = None if pin: print(f'Сообщение {message_id} закреплено.') else: print(f'Сообщение {message_id} не найдено.')
Используйте метод bot.set_chat_title()
, чтобы изменить название чата/канала. Названия не могут быть изменены для приватных чатов/групп. Чтобы это работало, бот должен быть администратором в чате и иметь соответствующие права администратора. Возвращает True
в случае успеха.
Используйте метод bot.set_chat_description()
, чтобы изменить описание группы, супергруппы или канала. Чтобы это работало, бот должен быть администратором в чате и иметь соответствующие права администратора. Возвращает True
в случае успеха.
Пример изменения названия и описания канала Telegram:
# код для python-telegram-bot-raw версии 13.x import telegram TOKEN = '...' bot = telegram.Bot(token=TOKEN) # ссылка_канала - это придуманная вами ссылка # Telegram-канала (t.me/ссылка_канала) chanell = '@ссылка_канала' new_title = "Новое название канала Telegram" if bot.set_chat_title(chat_id=chanell, title=new_title): print(f'Название канала {chanell} изменено.') else: print(f'Что-то пошло не так.') new_description = "Новое описание канала Telegram" if bot.set_chat_description(chat_id=chanell, description=new_description): print(f'Описание канала {chanell} изменено.') else: print(f'Что-то пошло не так.')