Перейти к содержимому
HeroBrine1st

Telegram Interface

Рекомендуемые сообщения

Установка

 

pastebin get c1v8T9CK /lib/Telegram.lua; pastebin get 4Lh9ALEY /lib/Promise.lua;pastebin get ji28sbxU /lib/JSON.lua

 

Создание бота

Здесь все подробно обьясняют: https://tlgrm.ru/docs/bots#botfather.

 

Документация

 

Эта библиотека возвращает одну-единственную функцию - Telegram (в либе названа Bot, но будет телеграмом)

  • Telegram(token: string) - создает обьект бота. Использует псевдо-ООП.
    • Bot.API - таблица с единственным полем
      • rawRequest(method: string, options: table): table - сырой запрос без оболочек.
      • Имеет метатаблицу. Bot.API[method](options) - возвращает промис.
        • Promise:next(onFulfilled:function) - установить функцию, принимающая значение result при успешном выполнении промиса.
        • Promise:catch(onRejected:function) - установить функцию, принимающая значение error при ошибке промиса.
        • Promise:await() - ждет завершения промиса и возвращает результат с учетом всех его обработчиков.
    • Bot.longpoll
      • on(event: string,callback: function) - установить обработчик ивента. Весь список - message, edited_message, channel_post, edited_channel_post, inline_query, chosen_inline_result, callback_query, shipping_query, pre_checkout_query
      • start() - запустить лонгполл. Программа блокируется.
      • stop() - остановить.

Возможно, библиотека будет не очень хорошо работать, но я тупо не могу ее адекватно протестировать - вебпрокси (закомментированная 7я строка) перестал работать (только для меня xD)

P.s. если у вас тоже выбивает ошибку на 30й строке - напишите. component.internet.request тупо льет nil вместо ошибки, я пока полагаю, что это связано с блокировками.

Изменено пользователем HeroBrine1st

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

А если сервера Telegram окажутся недоступны?

API сервер никогда не отключается. В одиночной игре использование данной библиотеки бессмысленно, а сервера без интернета не остаются.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Вещица реально крута, но есть одно "но": если мы перезагрузим ПК и заного запустим нашу библиотеку и попытаемся получить события, то на нас вывалятся все сообщения вплоть до мезозоя. Поэтому если планируешь дорабатывать - добавь фичу сохранения последнего lastUpdate в файл

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Вещица реально крута, но есть одно "но": если мы перезагрузим ПК и заного запустим нашу библиотеку и попытаемся получить события, то на нас вывалятся все сообщения вплоть до мезозоя. Поэтому если планируешь дорабатывать - добавь фичу сохранения последнего lastUpdate в файл

Согласно документации, если я вызову метод getUpdates с параметром offset, все обновления, меньшие или равные этому ID будут засчитаны как обработанные.

 

То есть API сервер сам сохраняет то, что я обработал обновление. Со стороны бота ничего сохранять в файл не нужно.

Однако есть одно но: при команде типа /reboot и последующей перезагрузке бот может зациклить перезагрузку. Решение - перед выключением или перезагрузкой надо еще раз получить обновления.

 

И да, лимит обновлений - 100 единиц. При получении нового обновления самое первое удаляется (если выходит за лимит). Если обновлению уже исполнился 1 день, оно автоматически удаляется.

Изменено пользователем HeroBrine1st

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Обновил библиотеку. Появился longpoll и запросы к API теперь асинхронные.

Однако вылетает ошибка, скорее всего из-за блокировок (тем не менее, телеграм без прокси у меня работает прекрасно). Если у вас даже с впн выпадает ошибка - напишите.

+ появилась поддержка веб-прокси, надо раскомментировать 7ю строку и вставить url, + переписать функцию encode (ради одной функции тащить web.lua от ECS не очень хотелось), если сайт использует другой вариант кодирования URL.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
1 час назад, HeroBrine1st сказал:

тем не менее, телеграм без прокси у меня работает прекрасно

 

Вроде он уже на автомате переключается на какую-нибудь проксю в клиенте.

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
1 час назад, Totoro сказал:

получает списки новых проксей

Неплохо бы найти способ так же делать в либе

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

На всякий случай, если кто-то захочет скачать библиотеку, выкладываю свой, исправленный и работающий на новых версиях вариант

 

Помимо исправления некоторых ошибок, добавил ссылку на зеркало Телеграма - теперь проблем с блокировками быть не должно

 

Ссылка

 

Команда для установки (с зависимостями):

pastebin get 4XB9FdRH -f /lib/Telegram.lua; 
pastebin get 4Lh9ALEY /lib/Promise.lua;
pastebin get ji28sbxU /lib/JSON.lua;

 

Изменено пользователем AtomicScience

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Ничего не понимаю, в OpenComputers удалили thread либу?
Документация имеется https://ocdoc.cil.li/api:thread а вот реквайр либы не робит ¯\_(ツ)_/¯
Или это внешняя зависимость?
image.thumb.png.35c6116f9744fb9c7941f33a5c9880ed.png

Изменено пользователем Belzebub

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
33 минуты назад, Belzebub сказал:

в OpenComputers удалили thread либу?

Всё на месте. Попробуй загрузить систему с дискеты OpenOS.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
34 минуты назад, Belzebub сказал:

Ничего не понимаю, в OpenComputers удалили thread либу?
Документация имеется https://ocdoc.cil.li/api:thread а вот реквайр либы не робит ¯\_(ツ)_/¯
Или это внешняя зависимость?

Этой версии OC уже пять лет. Пять. Если не заметили, пять лет этой версии. А, да, забыл сказать, уже 5 лет прошло с релиза 1.6.1. Ну, в заключение отмечу, что версия устарела на пять лет. 5 лет. Five years. 五年.

 

Зачем?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
17 часов назад, eu_tomat сказал:

Всё на месте. Попробуй загрузить систему с дискеты OpenOS.

¯\_(ツ)_/¯ один фиг либы нету.
да фиг бы с ней, я уже написал собственные функции для взаимодействия с тг апи без этих ваших новомодных тредов.

Изменено пользователем Belzebub

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Присоединяйтесь к обсуждению

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

Гость
Ответить в тему...

×   Вы вставили отформатированное содержимое.   Удалить форматирование

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отобразить как ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.


×
×
  • Создать...