Решил немного погрузиться в изучение Python, в процессе поставил задачу отойти от стандартного Hello World и попытаться написать сразу простого бота для Telegram. В итоге, бот может отвечать на заданные фразы, присылать внешний ip адрес и делать снимок с камеры. Скажу сразу, код не идеальный, но в процессе отладки ни один котик не пострадал.
Для начала сразу оговорюсь писать будем на Python версии 3 и будем использовать модули для облегчения жизни нашего проекта.
python3 — V
Python 3.7.5
Пишем мы на Ubunru 19.10, поэтому надо учитывать, что есть две версии установленного Python.
Установим PIP и необходимые пакеты:
apt install python3 — pip
pip3 install pytelegrambotapi
pip3 install PySocks
PIP – система управления пакетами, которая используется для установки и управления программными пакетами.
pytelegrambotapi – нужен для работы с API Telegram
PySocks – прокси сервер, иначе бот не будет работать.
Как было указано выше, пишем мы на Ubuntu, поэтому в директории пользователя /home/users-name/ создаем файлы bot-file.py и config.py
Создание Telegram бота с нуля Урок 5 Отправка и хранение файлов(мини «файловый хостинг»)
touch bot — file . py
touch config . py
Файл bot-file содержит код бота, а файл config необходим для конфигурации бота. В конфигурации необходимо будет указать список пользователей, которым разрешено взаимодействие с ботом.
Начнем с файла конфигурации, там все просто, необходимо просто указать id пользователя Telegram.
users = [ ‘id-user1’ , ‘id-user2’ ]
Переходим к файлу бота.
import config
import telebot
from telebot import apihelper
from telebot import types
import datetime
import logging
logger = logging . getLogger ( ‘log’ )
logger . setLevel ( logging . INFO )
fh = logging . FileHandler ( ‘someTestBot.log’ )
fh . setLevel ( logging . DEBUG )
formatter = logging . Formatter ( «%(asctime)s | %(levelname)-7s | %(message)s» )
fh . setFormatter ( formatter )
logger . addHandler ( fh )
### Прокси сервер
### Token telegram bot
bot = telebot . TeleBot ( ‘Token-bot’ , threaded = True )
### Функция проверки авторизации
def autor ( chatid ) :
strid = str ( chatid )
for item in config . users :
if item == strid :
return True
return False
### Клавиатура
keyboard1 = telebot . types . ReplyKeyboardMarkup ( )
keyboard1 . row ( ‘Привет’ , ‘Пока’ , ‘/ip’ , ‘/camera’ )
### Прием документов
def handle_docs_photo ( message ) :
chat_id = message . chat . id
downloaded_file = bot . download_file ( file_info . file_path )
with open ( src , ‘wb’ ) as new_file :
new_file . write ( downloaded_file )
bot . reply_to ( message , «Пожалуй, я сохраню это» )
except Exception as e :
bot . reply_to ( message , e )
### Прием фото
def handle_docs_photo ( message ) :
chat_id = message . chat . id
file_info = bot . get_file ( message . photo [ len ( message . photo ) — 1 ] . file_id )
downloaded_file = bot . download_file ( file_info . file_path )
src = ‘/home/users-name/received/’ + file_info . file_path ;
with open ( src , ‘wb’ ) as new_file :
new_file . write ( downloaded_file )
bot . reply_to ( message , «Фото добавлено» )
except Exception as e :
bot . reply_to ( message , e )
def start_message ( message ) :
if autor ( message . chat . id ) :
cid = message . chat . id
message_text = message . text
user_id = message . from_user . id
user_name = message . from_user . first_name
Бот Uploadgram превращает Telegram в безлимитное хранилище файлов
bot . send_message ( message . chat . id , ‘Привет, ‘ + user_name + ‘ Что ты хочешь от меня, собака сутулая!’ , reply_markup = keyboard1 )
bot . send_sticker ( message . chat . id , ‘CAADAgAD6CQAAp7OCwABx40TskPHi3MWBA’ )
bot . send_message ( message . chat . id , ‘Тебе сюда нельзя. Твой ID: ‘ + str ( message . chat . id ) )
bot . send_sticker ( message . chat . id , ‘CAADAgADcQMAAkmH9Av0tmQ7QhjxLRYE’ )
def camera_message ( message ) :
if autor ( message . chat . id ) :
bot . send_message ( message . chat . id , ‘Фото с камеры’ )
os . system ( ‘wget %s -O /tmp/photo.jpg’ % link )
imageFile = ‘/tmp/photo.jpg’
img = open ( imageFile , ‘rb’ )
bot . send_photo ( message . chat . id , img , caption = ‘Фото с камеры’ , reply_markup = keyboard1 )
bot . send_message ( message . chat . id , ‘Тебе сюда нельзя. Твой ID: ‘ + str ( message . chat . id ) )
bot . send_sticker ( message . chat . id , ‘CAADAgADcQMAAkmH9Av0tmQ7QhjxLRYE’ )
def prim_message ( message ) :
if autor ( message . chat . id ) :
link = ‘https://flammlin.com/pi’
os . system ( ‘wget %s -O /tmp/ip.txt’ % link )
docum = open ( ‘/tmp/ip.txt’ , ‘rb’ )
bot . send_message ( message . chat . id , docum , reply_markup = keyboard1 )
bot . send_sticker ( message . chat . id , ‘CAADAgADcQMAAkmH9Av0tmQ7QhjxLRYE’ )
bot . send_message ( message . chat . id , ‘Тебе сюда нельзя. Твой ID: ‘ + str ( message . chat . id ) )
bot . send_sticker ( message . chat . id , ‘CAADAgADcQMAAkmH9Av0tmQ7QhjxLRYE’ )
bot . polling ( )
Разберем некоторые интересные моменты, на которые следует обратить внимание.
Прокси
В данном примере используется Socks 5 прокси:
### Прокси сервер
Достаточно указать свои данные и запустить бот.
Token ID
В начале пытался брать Token из файла конфигурации, но бот так и не запустился. Пришлось оставить в коде, поэтому Token бота вписывать придется в сам код.
### Token telegram bot
bot = telebot . TeleBot ( ‘Token-bot’ , threaded = True )
Авторизация
### Функция проверки авторизации
def autor ( chatid ) :
strid = str ( chatid )
for item in config . users :
if item == strid :
return True
return False
Для проверки пользователя используется функция проверки id пользователя из файла конфигурации. В случае успеха бот присылает сообщение и стикер, тоже самое в случае отказа.
Клавиатура
Красивые кнопочки любят все.
### Клавиатура
keyboard1 = telebot . types . ReplyKeyboardMarkup ( )
keyboard1 . row ( ‘Привет’ , ‘Пока’ , ‘/ip’ , ‘/camera’ )
Второй горизонтальный ряд добавляется легко, просто пишем снова – keyboard1.row.
Прием документов и фотографий
Бот умеет сохранять документы и фотографии, которые скачиваются в папку received. Папку предварительно необходимо будет создать в профиле пользователя, где создавали файлы бота и файла конфигурации.
Wget
С вопросом получения картинки с камеры и внешнего ip адреса пришлось повозить подольше. Но в итоге через папку temp и вызов через bash wget все получилось.
Планировщик crontab
Бот запускается через планировщик задач, каждые пять минут происходит проверка запущенного процесса. Так как бот использует прокси и может произойти обрыв канала интернет, то повторный запуск бота не сможет произойти.
Для начала необходимо точно определить где и какая версия Python установлена.
Источник: flammlin.com
Как сохранить файлы из телеграммы?
Не знаете , как сохранять файлы из Telegram? Не волнуйтесь; Мы здесь чтобы помочь вам. В этой статье мы узнаем, как мы можем собирать данные из мессенджера Telegram – такие файлы, как аудио, видео, изображения и т. Д. Независимо от того, на какой платформе вы используете Telegram. Здесь мы будем учиться для платформ Android, iOS, Windows. Эти три являются наиболее популярными и крупными платформами.
В настоящее время Telegram разрастается и представляет собой хорошую альтернативу WhatsApp и приложениям для обмена сообщениями. Telegram имеет множество интересных функций, которые мы не можем увидеть в других приложениях. Например, каналы телеграмм, группы, боты, стикеры, секретные чаты, пользовательские темы, напоминания, запланированные сообщения и т. Д. Вот почему люди подключаются к этому многофункциональному приложению.
Авторские права на изображение: wordpress-509416-1617307.cloudwaysapps. com
Тем не менее, вы не знаете о приложении Telegram, а о его функциях читайте в нашей категории руководств для получения дополнительных сведений. Хорошо, пора начать наше руководство, надеюсь, оно будет для вас полезным.
Как сохранять файлы из Telegram?
Пора узнать точные шаги, чтобы сохраните наши файлы на Android, iOS, windows/web. Здесь мы собираемся поделиться оригинальным или официальным способом загрузки файлов из Telegram. Мы не рекомендуем стороннее программное обеспечение или приложение для загрузки файлов. Внимательно прочтите все шаги.
На Android
- Щелкните файл или откройте файл.
- Щелкните три точки в правом верхнем углу файла.
- Выберите, чтобы сохранить в загрузках/галерее.
На iOS
- Щелкните файл или откройте файл.
- Если тип мультимедиа – Видео или Изображение, затем нажмите на значок «Поделиться», который находится в левом нижнем углу.
- Затем выберите параметр «Сохранить в фотопленку».
- Для других типов файлов: в правом верхнем углу у вас будет значок “Поделиться”.
- Нажмите на него и сохраните его в любом месте (файлы, Dropbox и т. д.)
В Windows/Web
- Щелкните файл правой кнопкой мыши и выберите вариант сохранения (тип файла).
Хорошо, друзья следуют этим шагам, чтобы сохранить файлы на вашем устройстве. Я надеюсь, что их очень просто понять и легко реализовать. Все действия просты; вы можете легко сохранить свои файлы. Также мы создали для вас еще несколько руководств.
Новое в Telegram, пожалуйста, прочтите эти статьи –
- Как использовать Telegram в Windows или mac-OS?
- Установить напоминание в Telegram?
- Как отправить запланированное сообщение в Telegram?
Где файлы Telegram хранятся на нашем устройстве?
Правильный вопрос, Правильно? Это еще один запрос, где хранятся файлы телеграмм. Как правило, мы слушаем Telegram – это приложение на основе облачного хранилища. Но что произойдет, когда мы откроем файл или загрузим медиафайл для его просмотра. И зачем нам сохранять файл в галерее или где-то еще.
Давайте поймем весь цикл.
Когда кто-то отправляет нам файл в Telegram, это означает, что он хранится на облачных серверах Telegram. Затем мы должны загрузить этот файл, чтобы открыть/просмотреть его. Но когда мы видим файл только в приложении, он не отображается в галерее или проигрывателе.
Почему он не отображается и где он хранится?
Эти файлы присутствуют в папке Telegram как временные файлы – поэтому в на первый взгляд, их не видно. Вы можете найти эти файлы в папке телеграммы. Посмотрите,
Зайдите в файловый менеджер> Telegram> Telegram Docs/Telegram Videos/Telegram Audio/Telegram Images.
Указанный выше способ является абсолютным путем для поиска этих файлов.
Итак, что мы здесь узнаем?
Строим Telegram-бот в Яндекс.Облаке
2020-02-06 в 21:07, admin , рубрики: node.js, telegram, telegram bots, алиса, голосовые интерфейсы, навыки Алисы, Облачные вычисления, облачные сервисы, функции, яндекс, Яндекс API
Сегодня из подручных материалов мы соберём в Яндекс.Облаке Telegram-бот с использованием Yandex Cloud Functions (или Яндекс-функции — для краткости) и Yandex Object Storage (или Объектное хранилище — для ясности). Код будет на Node.js.
Однако, имеется одно пикантное обстоятельство — некая организация под названием, скажем так, РоссКомЦензур (цензура запрещена статьёй 29 Конституции РФ), не позволяет интернет-провайдерам России передавать запросы в Telegram API по адресу: https://api.telegram.org/ . Ну мы и не будем — нет так нет. Ведь в нашем саквояже имеются т.н. вебхуки — с их помощью мы не делаем запросы на конкретный адрес, а всего лишь шлём свой запрос в качестве ответа на любой запрос к нам. То есть, как в Одессе — отвечаем вопросом на вопрос. Поэтому Telegram API в нашем коде фигурировать не будет.
Дисклеймер
Упомянутые в данной статье названия каких-либо государственных организаций являются вымышленными, а возможные совпадения с названиями реально существующих организаций — случайными.
Итак, мы сделаем бота, который будет нас снабжать умными мыслями. Точно такого, как на картинке:
Создание бота
Мне бы хотелось, чтобы этот туториал был полезен всем, в т.ч. и начинающим «ботостроителям». Поэтому в этом разделе я довольно подробно опишу как вообще создавать в Telegram’е ботов. Для тех кому эта информация не требуются — переходите к следующим разделам.
Поскольку описываемый здесь бот уже создан, для демонстрационных целей я создам на короткое время другого бота (потом его удалю). Назову его DemoHabrBot. Имена (username) всех телеграм-ботов должны заканчиваться на слово bot, например: MyCoolBot или my_cool_bot — это для ботов. Но сначала даём боту название (name) — а это для людей.
Название может быть на любом языке, содержать пробелы, не обязано заканчиваться на слово bot, и даже не обязано быть уникальным. В данном примере я назвал этот бот Демо Хабр.
Теперь выбираем боту имя (username, то, которое для ботов). Назовём его DemoHabrBot. Всё что относилось к названию бота (name) совсем не относится к его имени — username (или относится, но с точностью до наоборот). После успешного создания уникального имени бота, нам надо скопировать и сохранить (в строжайшей тайне!) токен, показанный на скриншоте красной стрелкой. С его помощью мы чуть позже установим исходящий из Telegram’а вебхук на нашу Яндекс-функцию.
Здесь мы можем настроить нашего бота. Нажав кнопку Edit. мы перейдём на редактирование той или иной опции. Например, нажав на кнопку Edit Name мы можем изменить название бота, скажем вместо Умные Мысли, написать Бредовые Идеи. Botpic — это аватар бота, должен быть не менее 150 x 150 px.
Description — это краткое описание, который пользователь видит при первом запуске бота, в качестве ответа на вопрос: Что может делать этот бот? About — ещё более краткое описание, которое передаётся с ссылкой на бот ( https://t.me/SmartThoughtsBot ) или при просмотре информации о нём.
Нам осталось только настроить команды. Для этого нажимаем кнопку Edit Commands. Для стандартизации пользовательской практики Telegram рекомендует всегда использовать две команды: /start и /help, а если боту необходимы настройки — дополнительную команду /settings. Наш бот прост как шар, поэтому настройки ему пока не нужны.
Прописываем две первых команды, которые потом мы обработаем в коде. Теперь, если в поле ввода пользователь введёт слеш (знак косой черты: /), появится список команд для их быстрого выбора. Всё как на картинке: слева — устанавливаем команды через бота-отца; справа эти команды уже доступны пользователям в нашем боте.
Яндекс-функция
Теперь, когда наш бот создан, переходим в Яндекс.Облако, чтобы создать функцию, которая будет выполнять код нашего бота. Если вы ещё не работали с Яндекс.Облаком почитайте материал Алиса в стране Битрикс, а затем — Яндекс-функции рассылают почту. Я почти уверен, что двух этих относительно небольших статей вам вполне будет достаточно для базового понимания предмета.
Итак, в консоли Яндекс.Облака в левом навигационном меню выбираем пункт Cloud Functions, и затем нажимаем кнопку Создать функцию. Присваиваем ей имя, а для себя — краткое описание.
После нажатия кнопки Создать и прошествии пары секунд, новая функция появится в списке всех функций. Нажимаем на её имя — это приведёт нас на страницу Обзор нашей функции. Здесь надо включить (On) переключатель Публичная функция, чтобы она стала доступна из внешнего (для Яндекс.Облака) мира, а значение полей Ссылка для вызова и Идентификатор — хранить в глубокой тайне от всех кроме себя самого и Telegram’a, чтобы вашу функцию не могли вызывать различные аферисты.
Теперь с помощью левого меню переходим в Редактор функции. Давайте пока отложим на короткое время в сторону наши Умные Мысли, и создадим минимальную функцию-шаблон для проверки работоспособности нашего бота… Впрочем, в данном контексте эта функция и есть наш бот… Короче говоря, сейчас и прямо вот здесь мы сделаем простейшего бота, который будет «зеркалить» (т.е. отправлять назад) запросы пользователей. Этот шаблон можно использовать всегда при создании новых телеграм-ботов, чтобы убедиться, что связь с Telegram’ом работает нормально. Нажимаем Создать файл, называем его index.js, и в он-лайн Редакторе кода вставляем в этот файл следующий код:
module.exports.bot = async (event) => < const body = JSON.parse(event.body); const msg = < ‘method’: ‘sendMessage’, ‘chat_id’: body.message.chat.id, ‘text’: body.message.text >; return < ‘statusCode’: 200, ‘headers’: < ‘Content-Type’: ‘application/json’ >, ‘body’: JSON.stringify(msg), ‘isBase64Encoded’: false >; >;
В консоли Яндекс.Облака это должно выглядеть примерно так:
Далее чуть ниже указываем Точку входа — index.bot, где index это имя файла (index.js), а bot — имя функции (module.exports.bot). Все остальные поля оставляем «как есть», и в правом верхнем углу нажимаем кнопку Создать версию. Через несколько секунд эта версия функции будет создана. В скором времени, после тестирования вебхука, мы создадим новую версию — Умные Мысли.
Объектное хранилище
Теперь, когда у нас создана Яндекс-функция, давайте, пока мы находимся в консоли Яндекс.Облака, создадим т.н. бакет (bucket, т.е. ведро по-русски, отнюдь не букет) для хранения файлов изображений, которые будут использоваться в нашем боте Умные Мысли. В левом навигационном меню выбираем пункт Object Storage, нажимаем кнопку Создать бакет, придумываем ему название, например, img-bucket, и, главное, Доступ на чтение объектов делаем публичным — иначе Telegram’у наших картинок не видать. Все остальные поля оставляем без изменений. Нажимаем кнопку Создать бакет.
После этого список всех бакетов может выглядеть примерно так (если это ваш единственный бакет):
Сейчас я предлагаю нажать на имя бакета, и внутри него создать папку, чтобы упорядочить хранение картинок для разных своих приложений. Например, для телеграм-бота Умные Мысли я создал папку под названием tg-bot-smart-thoughts (ничего, я пойму этот шифр). Создайте и вы какую-нибудь.
Теперь можно нажать на имя папки, зайти в неё и загружать файлы:
А нажав на имя файла — получить его URL для использования в нашем боте, и вообще — где либо (но, не публикуйте этот URL без надобности, поскольку трафик с Объектного хранилища тарифицируется).
Вот, собственно, и всё с Объектным хранилищем. Теперь вы будете знать, что делать, когда увидите призыв загрузить туда файлы.
Вебхук
Сейчас мы установим вебхук — т.е. когда бот получит обновление (например, сообщение от юзера), с сервера Telegram в нашу Яндекс-функцию будет отправлен запрос (request) с данными. Вот строка, которую можно просто вставить в адресное поле браузера, и затем обновить страницу (это надо сделать всего один раз): https://api.telegram.org/bot/setWebHook?url=
Только заменим на токен полученный нами от бота-отца при создании нашего бота, а — на URL нашей Яндекс-функции. Минутку! Но ведь РоссКомЦензур запрещает провайдерам в РФ обслуживать адрес https://api.telegram.org . Да, верно. Но вы придумайте что-нибудь. Ведь можно же, например, попросить об этом свою бабушку в Украине, Израиле или Канаде — там нет никаких «росскомцензур», и один бог ведает, как люди живут без этого. В итоге, запрос-ответ при установки вебхука должен выглядеть так:
Тестируем. Должно «зеркалить».
Так и есть. Наши поздравления — теперь Яндекс-функция стала Telegram-ботом!
Умные Мысли
А теперь делаем Умные Мысли. Код открыт и и лежит на GitHub. Он довольно хорошо прокомментирован, и в нём всего сотня строк. Читайте его как оперная дива либретто!
Склонируйте проект и установите зависимости:
git clone https://github.com/stmike/tg-bot-smart-thoughts.git cd tg-bot-smart-thoughts npm i
Внесите необходимые вам изменения в файл index.js (опционально; можно ничего не менять). Создайте zip-архив, с файлом index.js и папкой node_modules внутри, например, под названием smart.zip.
Теперь перейдите в консоле к нашей Яндекс-функции, выберите вкладку ZIP-архив, нажмите кнопку Выбрать файл, и загрузите наш архив smart.zip. Наконец, в правом верхнем углу нажмите кнопку Создать версию.
Через несколько секунд, когда функция обновится, протестируем снова нашего бота. Теперь он уже не «зеркалит», а поставляет умные мысли!
Ссылки
Донаты
Источник: www.pvsm.ru