Python бот для озвучивания выбранного сообщения в Телеграм

Некоторые мессенджеры, такие как Telegram, иногда предоставляют API, который можно использовать для создания бота. Боты — это полезная в хозяйстве вещь. Например — хороший способ взаимодействия с приложениями, работающими на вашем домашнем сервере, без заморочек (в плане безопасности) с открытием директорий, проброса и подобной нездоровой фигни. Данный тип ботов легко написать, и они очень универсальны. В этой статье я покажу, как создать бота с помощью Python и Telegram.

Создание бота с помощью Python и Telegram

Недавно мне пришлось подавать документы на визу, а чтобы записаться на прием, нужно зайти на правительственный сайт и постоянно мониторить появление свободных мест. В этом деле надо быть шустрым, чтобы успеть, так как квоты разлетаются, как горячие бабушкины пирожки.

Поэтому я решил написать бота, который перемещается по формам каждые 10 минут и в случае появления изменений отправляет мне сообщение в Telegram.

Бот состоит из двух частей:

  1. Код для взаимодействия с Selenium WebDriver.
  2. Оповещения об изменениях через Telegram.

Для начала нужно скачать с сайта Selenium WebDriver один драйвер для браузера:

Создание голосового сообщения из текста. Простой Telegram bot на Python.

Скачать Selenium WebDriver

Затем используем библиотеку Splinter, которая абстрагирует взаимодействие с драйвером.

from splinter import Browser
with Browser ( ) as browser :
browser . visit ( «http://www.google.com» )
# Find and fill out the search form.
browser . find_by_name ( ‘q’ ) . fill ( ‘splinter’ )
# Find and click the ‘search’ button.
button = browser . find_by_name ( ‘btnK’ ) . click ( )
# Check for result on the page.
if browser . is_text_present ( ‘splinter.readthedocs.io’ ) :
print ( «Yes, the official website was found!» )
print ( «No, it wasn’t found. » )

Чтобы запустить код, сначала запустите ранее загруженный драйвер, а затем запустите приложение Python.

Теперь, когда у нас есть скрипт, который мониторит изменения на сайте, нам нужен способ получения уведомлений. Чтобы создать бота Telegram, нам понадобится токен. Для получения токена воспользуемся ботом BotFather.

Создать бот Python Telegram

После отправления команды / newbot , BotFather предложит придумать имя бота, а затем предоставит токен.

Еще по теме:  Где в галерее посмотреть фото из Телеграмм

Здесь я обернул библиотеку python-telegram-bot в класс только для того, чтобы при необходимости было проще перейти на другое решение, но вы можете пропустить это и использовать библиотеку напрямую.

import telegram
class Telegram :
def __init__ ( self , token : str ) :
self . bot = telegram . Bot ( token = token )
self . offset = 0
def send ( self , chat_id , message ) :
self . bot . send_message ( chat_id = chat_id , text = message )

Добавьте бота в группу.

Ссылка для получения обновлений бота:

https : //api.telegram.org/bot/getUpdates
https : //api.telegram.org/bot123456789:jbd78sadvbdy63d37gda37bd8/getUpdates

Найдите объект chat :

«update_id» : 8393 ,
«message_id» : 3 ,
«first_name» : «AAA»
«date» : 25497 ,
«new_chat_participant» : <
«first_name» : «NAME» ,
«username» : «YOUR_BOT_NAME»

Три простых шага для отправки сообщения в Telegram используя Python

Отправлять сообщение в телеграмм может оказаться полезным при запуске ресурсоемких операций. Например скрипт который отработал один час, должен отправить вам сообщение о статусе завершившейся операций. Вам вероятно, понадобится простой скрипт, чтобы отправить сообщение, когда ваша операция завершит работу. Для этого мы можем легко написать функцию Python, которая отправляет вам сообщение Telegram всякий раз, когда вы ее вызываете.

Создание Telegram-бота с помощью BotFather

  1. Откройте приложение Telegram и найдите BotFather. (Встроенный бот Telegram, который помогает пользователям создавать собственных ботов Telegram)
  2. Введите /newbot, чтобы создать нового бота.
  3. Дайте вашему боту название.
  4. Скопируйте токен Telegram для вашего нового бота.

Примечание: не загружайте свой токен онлайн, так как любой, у кого есть ваш токен, получит полный контроль над вашим ботом Telegram.

Получение идентификатора chat ID

В Telegram у каждого чата есть идентификатор чата. Нам нужен этот идентификатор для отправки сообщений в Telegram с использованием Python.

  1. Отправьте своему боту в Telegram сообщение (любое)
  2. Запустите этот скрипт Python, чтобы найти свой chat ID

import requests TOKEN = «YOUR TELEGRAM BOT TOKEN» url = f»https://api.telegram.org/bot/getUpdates» print(requests.get(url).json())

Этот скрипт вызывает функцию getUpdates, которая проверяет наличие новых сообщений в чатах. Мы можем найти наш chat ID из возвращенного JSON (тот, что выделен красным)

Note: Если вы не отправите сообщение своему боту в Telegram, ваши результаты могут быть пустыми.

  1. Скопируйте и вставьте идентификатор чата в следующий шаг.

Отправка сообщения Telegram с помощью Python

Скопируйте и вставьте 1) ваш токен бота Telegram и 2) ваш chat ID из предыдущих 2 шагов в следующий скрипт Python. (И также настройте свое сообщение)

Еще по теме:  Как в Телеграмме писать подчеркнутыми буквами

import requests TOKEN = «YOUR TELEGRAM BOT TOKEN» chat_id = «YOUR CHAT ID» message = «hello from your telegram bot» url = f»https://api.telegram.org/bot/sendMessage?chat_id= print(requests.get(url).json()) # this sends the message

Запустите скрипт и проверьте свой Telegram!

Источник: simpleitrunner.ru

Пишем бота пересылки сообщений из VK в Telegram на Python

aaf44db7572a2fcafef3ae5ea5c20bb2.png

Очень часто бывает что у вас группа в vk.com и вам бы хотелось завести канал в телеграмм но постить вручную сообщения в два источника не очень удобно. Ниже мы рассмотрим бота для пересылки сообщений из вконтакте в телеграм.

Регистрируем бота в Telegram

Отправляем ему команду:

/newbot

Придумываем имя боту

Alright, a new bot. How are we going to call it? Please choose a name for your bot.

Придумываем username, должно заканчиваться обязательно на ‘bot’

Good. Now let’s choose a username for your bot. It must end in `bot`. Like this, for example: TetrisBot or tetris_bot.

Все, бот зарегистрирован, самое важное это последние сообщение с токеном бота, ни кому не сообщайте его т.к. зная токен можно полностью управлять ботом.

Use this token to access the HTTP API:
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

Пишем бота Telegram

Создаем в нашем проекте файл settings.ini и добавляем в него настройки подключения нашего будущего бота пересылки сообщений из vk.

где:
last_id — последний ID сообщения ленты вконтакте, можно оставить 123
include_link — вставлять ли ссылки
preview_link — использовать ли предпросмотр ссылок

login — ваш логин аккаунта вконтакте
password — ваш пароль аккаунта вконтакте
domain — группа или id сообщества вконтакте
count — количество последних забираемых сообщений сообщество (ограничение API вконтакте, максимум 100 за один запрос)

bot_token — токен бота полученный выше
channel — название канала в телеграмме для публикации ботом, важно помнить что для публикации сообщений в канале ботом, его нужно добавить администратором канала

Нам понадобятся библиотеки:

configparser и logging из стандартной библиотеки Python, и конечно сам Python, на момент написания статьи у меня была версия 3.6.2

Устанавливаем библиотеки через pip желательно в virtualenv, в консоли набираем:

pip install vk_api pip install pyTelegramBotAPI

Создаем файл vk_to_tg.py и начинаем в него писать.

import os import sys import vk_api import telebot import configparser import logging from telebot.types import InputMediaPhoto

Считываем данные из settings.ini
config_path = os.path.join(sys.path[0], ‘settings.ini’) config = configparser.ConfigParser() config.read(config_path) LOGIN = config.get(‘VK’, ‘LOGIN’) PASSWORD = config.get(‘VK’, ‘PASSWORD’) DOMAIN = config.get(‘VK’, ‘DOMAIN’) COUNT = config.get(‘VK’, ‘COUNT’) BOT_TOKEN = config.get(‘Telegram’, ‘BOT_TOKEN’) CHANNEL = config.get(‘Telegram’, ‘CHANNEL’) INCLUDE_LINK = config.getboolean(‘Settings’, ‘INCLUDE_LINK’) PREVIEW_LINK = config.getboolean(‘Settings’, ‘PREVIEW_LINK’)

Инициализируем телеграмм бота vk телеграмм бота
bot = telebot.TeleBot(BOT_TOKEN)

Получаем данные из vk.com для последующей обработки
# Получаем данные из vk.com def get_data(domain_vk, count_vk): vk_session = vk_api.VkApi(LOGIN, PASSWORD) vk_session.auth() vk = vk_session.get_api() # Используем метод wall.get из документации по API vk.com response = vk.wall.get(domain=domain_vk, count=count_vk) return response

Проверяем и извлекаем данные по условиям перед отправкой
# Проверяем данные по условиям перед отправкой def check_posts_vk(): response = get_data(DOMAIN, COUNT) response = reversed(response[‘items’]) for post in response: # Читаем последний извесный id из файла ‘LAST_ID’) # Сравниваем id, пропускаем уже опубликованные if int(post[‘id’]) 0: image_urls = list(map(lambda img: max( img[«sizes»], key=lambda size: size[«type»])[«url»], images)) print(image_urls) bot.send_media_group(CHANNEL, map( lambda url: InputMediaPhoto(url), image_urls)) # Проверяем есть ли репост другой записи if ‘copy_history’ in post: copy_history = post[‘copy_history’] copy_history = copy_history[0] print(‘—copy_history—‘) print(copy_history) text = copy_history[‘text’] send_posts_text(text) # Проверяем есть ли у репоста прикрепленное сообщение if ‘attachments’ in copy_history: copy_add = copy_history[‘attachments’] copy_add = copy_add[0] # Если это ссылка if copy_add[‘type’] == ‘link’: link = copy_add[‘link’] text = link[‘title’] send_posts_text(text) img = link[‘photo’] send_posts_img(img) url = link[‘url’] send_posts_text(url) # Если это картинки if copy_add[‘type’] == ‘photo’: attach = copy_history[‘attachments’] for img in attach: image = img[‘photo’] send_posts_img(image) # Записываем id в файл config.set(‘Settings’, ‘LAST_ID’, str(post[‘id’])) with open(config_path, «w») as config_file: config.write(config_file)

Еще по теме:  Как на Айфон устонавить игры через Телеграмм

Отправляем посты в телеграмм

# Текст def send_posts_text(text): if text == »: print(‘no text’) else: # В телеграмме есть ограничения на длину одного сообщения в 4091 символ, разбиваем длинные сообщения на части for msg in split(text): bot.send_message(CHANNEL, msg, disable_web_page_preview=not PREVIEW_LINK)

Если сообщение длинное то разбиваем его на несколько:
def split(text): if len(text) >= max_message_length: last_index = max( map(lambda separator: text.rfind(separator, 0, max_message_length), message_breakers)) good_part = text[:last_index] bad_part = text[last_index + 1:] return [good_part] + split(bad_part) else: return [text]

Если это изображение:

# Изображения def send_posts_img(img): # Находим картинку с максимальным качеством url = max(img[«sizes»], key=lambda size: size[«type»])[«url»] bot.send_photo(CHANNEL, url)

И в самом конце инициализируем наш скрипт:
if __name__ == ‘__main__’: check_posts_vk()

Репозиторий бота на github.com

Все, удачного Вам написания собственных Telegram ботов на Python

Источник: nikovit.ru

Рейтинг
( Пока оценок нет )
Загрузка ...