Перейти к содержанию
Авторизация  
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 сказал:

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

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

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


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

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

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

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

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

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

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

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

Авторизация  

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