How to create a Telegram bot with Swift using Vapor
В этой статье я расскажу как сделать Telegram бота на свифте + Vapor
Для кого?
Для iOS разработчиков, которые не хотят учить другой язык, что бы сделать элементарный back
Disclaimer: я не сеньор-помидор, пишу для себя и как умею/хочу, если что-то вам не нравится в коде/тексте, просто закройте вкладку плз
Стек:
- Vapor — единственный веб фреймворк на свифте(SwiftNIO), который активно поддерживается комьюнити и постоянно развивается, с кучей готовых решений из коробки, типа сокетов, Sign with Apple, базами данных ит.п.
- https://github.com/nerzh/telegram-vapor-bot — обертка над Telegram bot api, работает асинхронно, поддерживает лонгпол и вебхук, автор отвечает и прислушивается к юзерам, быстро фиксит баги, в общем поставьте звездочку
- Digital Ocean — тут мы будем хостить нашего бота, подойдет и любой другой сервис, где можно установить Ubuntu, у меня все проекты на DO уже давно, мне удобно и привычно
Начнем:
Устанавливаем Vapor. Для этого пишем в терминале
brew install vapor
(Если у вас почему-то до сих пор не установлен brew — https://brew.sh/index_ru)
После чего так же в терминале в нужной нам директории пишем
vapor new tgbot
Вместо tgbot, естественно, можете написать что хотите
В браузере переходим на http://127.0.0.1:8080/
Если всё ок(а как иначе) должны увидеть:
It works!
Переходим в файл configure.swift и добавляем туда 2 строчки:
app.http.server.configuration.hostname = “0.0.0.0”app.http.server.configuration.port = 80
Меняем порт на 80, а так же адрес на 0.0.0.0 – это как 127.0.0.1
Кстати, если проект падает при старте с такой ошибкой:
Fatal error: Error raised at top level: bind(descriptor:ptr:bytes:): Address already in use (errno: 48)
Напишите в терминале:
killall Run
В браузере теперь можно перейти просто на http://127.0.0.1/
В Package.swift добавляем нашу библиотеку для Telegram Bot Api
.package(name: “telegram-vapor-bot”, url: “https://github.com/nerzh/telegram-vapor-bot", .upToNextMajor(from: “1.0.2”)) .product(name: "telegram-vapor-bot", package: "telegram-vapor-bot")
Далее создаем файл DefaultBotHandlers.swift, как предлагает автор библиотеки, и добавляем туда код, опять же из https://github.com/nerzh/telegram-vapor-bot
Что здесь происходит:
Мы добавляем 2 хендлера, то есть на что будет реагировать наш бот, и что будет отвечать. Первый хендлер дефолтный, то есть через него проходит абсолютно всё(текст, картинки, видео ит.д.), в ответ он пришлет Success. Так же мы видим строку
filters: (.all && !.command.names(["/ping"])
Это значит что есть исключение, в виде команды /ping
Как раз второй хендлер отвечает только на /ping, в ответ он пришлет pong
К хендлерам мы вернемся позже, сейчас настроим бота, переходим в файл configure.swift
let tgApi: String = "XXXXXXXXXX:YYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYY"let connection: TGConnectionPrtcl = TGLongPollingConnection()TGBot.configure(connection: connection, botId: tgApi, vaporClient: app.client)try TGBot.shared.start()TGBot.log.logLevel = .errorDefaultBotHandlers.addHandlers(app: app, bot: TGBot.shared)
Вместо ХХХХ… вписываем токен нашего бота, который получаем у BotFather, пишем ему /newbot, заполняем имя ит.д. После чего вставляем полученный токен
На этом настройка бота через longpoll окончена, можно подключить и через вебхук, но это чуть сложнее, возможно в следующей заметке покажу (про разницу можете почитать здесь)
Теперь запускаем проект и пишем нашему боту что угодно:
Если же мы напишем /ping, то сработает наш второй хендлер:
Вот и всё, просто же?) Дальше нужно углубляться — всё зависит от ваших нужд, я же покажу несколько простых примеров:
- Допустим нам нужно получить прямую ссылку на изображение, чтобы дальше ее залить на наш(или не наш)сервер и использовать в iOS приложении
Мы пытаемся получить путь до нашего изображения(Саня привет), после чего бот пришлет прямую ссылку на него в максимальном качестве(телеграм отдает массив с разными размерами, последний(last) самый большой, первый(first) маленький
Рекомендую почитать доки Telegram Bot API, что бы понимать что можно сделать в принципе, например, есть метод, который может переслать сообщение в нужный вам канал, как буд-то это вы запостили, пересыла видно не будет. Для этого нужно в нужный канал добавить админом нашего бота после чего воспользоваться методом
bot.forwardMessage
2. Получаем случайный факт о кошках через бесплатное Api, и отправляем его в ответ
Вместо привычной URLSession у вапора есть свой http client, кстати далеко не все библиотеки, которые вы используете для iOS будут работать в Linux, например Alomofire не работает, но они обещали сделать поддержку
Сценарии и логика могут быть любыми, дальше уже google в руки и вперед, решать именно ваши задачи
Теперь перейдем к процессу деплоя на DO
Для этого создадим репозиторий на гитхабе, как это сделать я писал ранее
Заходим на https://www.digitalocean.com/
Заходим на наш дроплет через SSH
ssh root@ip_дроплета
далее пишем yes
и вводим пароль, который указали при создании
Теперь будем устанавливать на сервер необходимые пакеты:
sudo apt-get update
потом
sudo apt-get install clang libicu-dev libatomic1 build-essential pkg-config
потом
sudo apt-get install libssl-dev
Далее качаем и устанавливаем Swift
wget https://swift.org/builds/swift-5.4.1-release/ubuntu1804/swift-5.4.1-RELEASE/swift-5.4.1-RELEASE-ubuntu18.04.tar.gz
потом
tar xzf - < swift-5.4.1-RELEASE-ubuntu18.04.tar.gz*
потом
sudo mkdir /swift
потом
sudo mv swift-5.4.1-RELEASE-ubuntu18.04 /swift/5.4.1
потом
sudo ln -s /swift/5.4.1/usr/bin/swift /usr/bin/swift
и пишем для проверки
swift --version
Теперь немного сахара для удобства — Vapor Toolbox
git clone https://github.com/vapor/toolbox.git
потом
cd toolbox
потом
swift build -c release --disable-sandbox --enable-test-discovery
потом
mv .build/release/vapor /usr/local/bin
Далее пишем
git clone https://github.com/dimabiserov/vaporTGBotExample.gitпуть до вашего репозитория, если он приватный то попросит логин и пароль от гитхаба, в моем случае он публичный
Пишем vapor build
после пишем
vapor run
Готово, бот работает!
Теперь что бы он работал всегда, даже когда мы закроем терминал, заходим на DO и нажимаем на console:
В открывшемся окне нужно залогиниться,
login: root, password: который выше сохраняли
Далее переходим в папку с проектом и пишем vapor run
Теперь бот будет работать всегда
Чтобы отключить нашего бота, зайдите снова в console DO и нажмите на клавиатуре control + c
Чтобы обновить код, нужно его закомитить в гит, после чего зайти в консоль DO-в папку проекта и написать:
git pull && vapor build && vapor run
На этом всё, теперь ты фуллстак iOS Developer 🤡
Если наберем просмотров/лайков, напишу статью как сделать примитивный back на вапоре с базой данных, ендпоинтами, своим доменом ит.д.
Спасибо, что прочёл эту немаленькую статью, постарался расписать максимально подробно, чтобы и новички смогли)
Скачать проект c Github
Полезные ссылки:
Чат Server Side Swift Developer, где всегда помогут и подскажут по Вапору
Мой Telegram канал со Swift статьями
Чат Indie iOS Разработчиков
如何使用“Spam Bot”刪除 Telegram 中的限制
Telegram是一款流行的跨平台消息應用程序,提供增強的隱私和加密功能,並支持廣泛的群聊功能。它沒有與 Facebook 擁有的 Facebook Messenger 和 WhatsApp 等其他社交媒體平台的任何鏈接。這就是為什麼這項服務對許多人更有吸引力的原因。
Telegram 是多平台的,有適用於 iOS、Android、Windows、Mac 和 Linux 的應用程序版本。這個應用程序也可以從網絡瀏覽器訪問,它像所有其他平台一樣有一些限制,但它提供的功能特性可以輕鬆處理它們。
這些限制包括被阻止或報告,以及無法在不允許成員發送任何或盡可能多的信件的群組中發送消息。Telegram 作為一種流行的即時通訊應用程序,引入了一項新功能,使群組管理員能夠更好地控製成員的參與方式。
它使組管理員能夠指定成員在組中發送消息的頻率。在這種情況下,發送文本的成員將不得不等待 30 秒到長達一個小時,然後才能在該組中重複某些內容。如果帳戶被阻止或報告或不允許發送任何消息,則電報引入了一些功能特性以消除這些限制。
電報和垃圾郵件機器人的限制
要了解 Telegram 和 Spam bot 中的限制之間的關係,讓我們對 spam 和 spam bots 稍微熟悉一下。
推送給大量用戶的垃圾郵件是任何不適當或不受歡迎的消息。它通常涉及不需要的產品廣告、用於使鏈接網站在搜索引擎結果中更高的不相關反向鏈接,以及諸如詐騙或惡意軟件下載之類的事情。
它也可以是任何不相關且大量交付的內容。
垃圾郵件機器人完全自動化大多數在線垃圾郵件,並且用戶不會與自然人進行交互。垃圾郵件機器人傳播預編程的消息或遵循預編程的對話腳本與用戶交互。
垃圾郵件機器人如何運作?
垃圾郵件機器人可以在論壇、社交媒體平台、消息應用程序或電子郵件託管服務提供商上創建虛假帳戶。有時他們試圖將他們的活動偽裝成來自真實用戶。由於創建用戶帳戶只需要填寫一些字段,例如姓名、電子郵件地址等。
攻擊者對垃圾郵件機器人進行編程以自動填寫這些表格,這對於熟練的程序員來說是一項簡單的任務。一旦垃圾郵件機器人擁有帳戶或訪問平台,它們就會根據機器人創建者設置的預定規則開始推送垃圾郵件。
其他類型的垃圾郵件機器人可能會在不實際發送垃圾郵件的情況下幫助垃圾郵件發送者。一些垃圾郵件機器人收集電子郵件地址或電話號碼,為垃圾郵件發送者提供目標——它們掃描網絡,抓取聯繫信息,並將其保存到數據庫中。
垃圾郵件機器人如何在社交媒體上運作
許多機器人在 Facebook、Twitter、Telegram 或 Instagram 等社交媒體平台上都很活躍。社交媒體垃圾郵件機器人發送消息或創建帖子,承諾提供一系列不同的東西,如免費物品、消費品交易或其他好得令人難以置信的優惠。他們還可能喜歡、分享或轉發垃圾帖子或留下垃圾評論。
社交垃圾郵件機器人可以通過虛假帳戶或被盜用的真實用戶帳戶進行操作,而垃圾郵件機器人可以復制合法用戶的個人資料圖片,使虛假社交媒體機器人帳戶看起來更合法。
如何從垃圾郵件機器人或自然人那裡獲取消息?
垃圾郵件機器人看起來像實際用戶,但通常它們不夠複雜。有一些快速方法可以確定帖子或消息是否來自垃圾郵件機器人。
- 過多的拼寫或語法錯誤。
- 它們聽起來好得無法準確。
- 單擊鏈接或轉發消息的緊急指示。
- 它們來自意想不到的來源。
- 它們與線程無關。
如何恢復全部功能?
使用 Spam Bot 機器人消除 Telegram 中的限制是一種廣泛使用的方法。它可以刪除垃圾郵件鏈接、縮短的 URL、外部提及、轉發、回复鍵盤鏈接以及隱藏用戶加入和留言。它還允許將單詞和域列入黑名單,刪除褻瀆和氾濫的消息,限制垃圾郵件發送者的權限;只為新成員或所有人工作。
如何在 Telegram 中添加垃圾郵件機器人?
讓著名的即時通訊應用 Telegram 脫穎而出是在群聊中使用機器人的選項。Telegram bot 是第三方應用程序,用於通過執行特定功能、遵循說明以及與其他成員交互來改進其功能。如果您是Supergroup的管理員並且想知道如何添加機器人,您應該按照以下步驟操作。
- 啟動電報應用程序。
- 在屏幕底部,單擊聯繫人圖標。
- 在屏幕頂部,單擊搜索欄。
- 輸入您要添加的機器人的名稱@[botname]。
- 單擊機器人名稱以在聊天中顯示它。
- 從聊天窗口的右上角,選擇機器人的個人資料圖片。
- 在“發送消息”選項下方找到並選擇“添加到組”選項;這樣您就可以訪問要添加成員的組列表。
- 選擇要將機器人添加到的組。
- 點擊“是”進行確認。
底線
Telegram 中的限制可能會降低此功能齊全的應用程序的功能級別。為了防止或刪除它們,您最好添加一個垃圾郵件機器人,該機器人可以刪除常見的限制,如阻止、報告或發送消息。它是智能通信的重要補充。
Ten articles before and after
Как закрепить сообщение в Телеграм. Что нужно сделать? – Telegram 简体版
如何绕过Telegram(tg) 频道封锁的解决方法(macOS版) – – Telegram 简体版
Mac电脑ss/ssr时Telegram无法连接正常使用的3分钟解决方法 – – Telegram 简体版
Telegram将迎来两个重要更新 | – Telegram 简体版
Telegram Reminder Bot. Telegram along with messaging feature… – Telegram 简体版
电报Telegram新手使用教程三 如何搜索Telegram群?强大的Telegram机器人使用说明 | Telegram 简体版
How to restrict saving content on Telegram – Telegram 简体版
3599 Seconds to Hours | Telegram Downloadtelegram中文版下载
11 Tools for Managing Chats and Channels in the Telegram – Telegram 简体版