Гайд Dolbogram - Lua Telegram Bot Module

chapo

🫡 В армии с 17.10.2023. В ЛС НЕ ОТВЕЧАЮ
Автор темы
Друг
8,772
11,216
Dolbogram - мини библиотека для упрощенного взаимодействия с Telegram Bot API.

"Подключение" к боту:
Lua:
local Telegram = require('dolbogram') -- подключаем модуль
local bot = Telegram('ТОКЕН_БОТА') -- создаем бота с вашим токеном

bot:connect() -- "подключаемся"

bot:on('ready', function(data)
    msg('Bot started, name: ', data.first_name) -- выводим имя бота после подключения
end)

Вызов методов из Telegram Bot API:
  1. ищем нужный нам метод тут: https://core.telegram.org/bots/api
  2. смотрим какие "поля" нужны в методе и заполняем их емае
  3. пример с sendMessage:
    Lua:
    bot:sendMessage{chat_id = 12345678, text = u8('Здарова ушлепок, как дела?')}

Обработка событий:
обработка событий происходит через метод "on", доступны следующие "события":
  1. message
  2. edited_message
  3. channel_post
  4. edited_channel_post
  5. inline_query
  6. chosen_inline_result
  7. callback_query
  8. shipping_query
  9. pre_checkout_query
  10. poll
  11. poll_answer
  12. my_chat_member
  13. chat_member
  14. chat_join_request
  15. * (туда будут отправляться все ивенты)

Функция "on" так же принимает коллбек функцию. Пример:
Lua:
bot:on('message', function(message)
    print('New message from ID:', message.from.id, 'Text: ', message.text)
end

Примеры использования:
Lua:
local Telegram = require('dolbobot')
local bot = Telegram('YOUR_TOKEN_HERE')
bot:connect()

bot:on('ready', function(me)
    print('Bot started!', ('ID: %s, Name: %s, Username: %s'):format(me.id, me.first_name, me.username))
end)

bot:on('message', function(message)
    msg('New message from ID:', message.from.id, 'Text: ', message.text)
    bot:sendMessage{chat_id = message.from.id, text = message.text}
end)

function main()
    while not isSampAvailable() do wait(0) end
    wait(-1)
end
1683985220013.png

Lua:
local encoding = require('encoding')
encoding.default = 'CP1251'
local u8 = encoding.UTF8

function msg(...) sampAddChatMessage(table.concat({...}, '  '), -1) end

local Telegram = require('dolbogram')
local bot = Telegram('TOKEN')

bot:connect()

bot:on('ready', function(data)
    msg('Bot started, name: ', data.first_name)
end)

bot:on('*', function(data, json)
    msg('Any event handler was called!', json)
end)

bot:on('message', function(message)
    msg('New message from ID:', message.from.id, 'Text: ', message.text)
    if message.text == '/start' then
        bot:sendMessage{chat_id = message.from.id, text = u8('Тыкай на кнопочки'), reply_markup = {
            keyboard = {
                { { text = u8('Ник') }, { text = u8('Айди') } },
                { { text = u8('Сервер') } }
            }
        }}
    elseif message.text == u8('Ник') then
        bot:sendMessage{chat_id = message.from.id, text = u8('Твой ник: '..sampGetPlayerNickname(select(2, sampGetPlayerIdByCharHandle(PLAYER_PED))))}
    elseif message.text == u8('Айди') then
        bot:sendMessage{chat_id = message.from.id, text = u8('Твой айди: '..select(2, sampGetPlayerIdByCharHandle(PLAYER_PED)))}
    elseif message.text == u8('Сервер') then
        bot:sendMessage{chat_id = message.from.id, text = u8('Какую инфу о сервере ты хочешь узнать?'), reply_markup = {
            inline_keyboard = {
                { { text = u8('Название'), callback_data = 'server:name' }, { text = u8('Адрес'), callback_data = 'server:address' } },
                { { text = u8('Кол-во игроков'), callback_data = 'server:playersCount' } },
            }
        }}
    else
        bot:sendMessage{chat_id = message.from.id, text = u8('Я не понимаю че тебе надо, дурила')}
    end
end)

bot:on('callback_query', function(query)
    if query.data == 'server:name' then
        bot:sendMessage{chat_id = query.from.id, text = u8(sampGetCurrentServerName())}
    elseif query.data == 'server:address' then
        bot:sendMessage{chat_id = query.from.id, text = u8('IP:PORT: ' .. table.concat({sampGetCurrentServerAddress()}, ':'))}
    elseif query.data == 'server:playersCount' then
    
        bot:sendMessage{chat_id = query.from.id, text = u8('На сервере: '..sampGetPlayerCount(false) .. '\nВ зоне стрима: '..sampGetPlayerCount(true))}
    end
end)

function main()
    while not isSampAvailable() do wait(0) end
    wait(-1)
end
 

Вложения

  • dolbogram.lua
    6.4 KB · Просмотры: 222
Последнее редактирование:

Lance_Sterling

Известный
798
278
по моему отсылать запросы каждый кадр в игре не очень оптимизированно
 
  • Нравится
Реакции: Z3roKwq

chapo

🫡 В армии с 17.10.2023. В ЛС НЕ ОТВЕЧАЮ
Автор темы
Друг
8,772
11,216
по моему отсылать запросы каждый кадр в игре не очень оптимизированно
а по моему лучше не пиздеть если ты не понял как работает код.
скрипт отсылает запрос только после получения ответа на предыдущий запрос
1686156160479.png
 
  • Нравится
Реакции: Lance_Sterling

Tak

Известный
176
70
Работает минут 20 и выкидывает ошибку, памагите пожалуйста ;)
(пишет что ошибка возникает в самой библиотеки)
Ошибка:

Ошибка:
[ML] (error) Telegram: cannot resume non-suspended coroutine
stack traceback:
    ... Games Launcher\bin\arizona\moonloader\lib\dolbogram.lua: in function 'resolve'
    ... Games Launcher\bin\arizona\moonloader\lib\dolbogram.lua:44: in function <... Games Launcher\bin\arizona\moonloader\lib\dolbogram.lua:34>
[ML] (error) Telegram: Script died due to an error. (0EB897DC)

У меня при этом:

КОД:
script_name('Telegram')

local encoding = require('encoding')
encoding.default = 'CP1251'
local u8 = encoding.UTF8

local Telegram = require('dolbogram')
local bot = Telegram('54........не покажу ))))')
bot:connect()

function main()
    while not isSampAvailable() do wait(0) end
    wait(-1)
end

bot:on('ready', function(data)
    print('Bot started, name: ', data.first_name)
end)

bot:on('message', function(message)
    if message.text == '/info' then
        bot:sendMessage{chat_id = message.from.id, text = 'Kek lol'}
    end
end)
 

Akionka

akionka.lua
Проверенный
742
500
ладно а чо типизацию не сделал под это? https://www.blast.hk/threads/173087/

[ML] (error) секрет: C:\Games\GTASA\moonloader\lib\dolbogram.lua:154: C:\Games\GTASA\moonloader\lib\requests.lua:106: error in POST request: timeout stack traceback: [C]: in function 'error' C:\Games\GTASA\moonloader\lib\dolbogram.lua:154: in function 'reject' C:\Games\GTASA\moonloader\lib\dolbogram.lua:46: in function [ML] (error) секрет: Script died due to an error. (id:32):
[ML] (error) секрет: C:\Games\GTASA\moonloader\lib\dolbogram.lua:154: C:\Games\GTASA\moonloader\lib\requests.lua:106: error in POST request: timeout

stack traceback:

    [C]: in function 'error'

    C:\Games\GTASA\moonloader\lib\dolbogram.lua:154: in function 'reject'

    C:\Games\GTASA\moonloader\lib\dolbogram.lua:46: in function <C:\Games\GTASA\moonloader\lib\dolbogram.lua:34>

[ML] (error) секрет: Script died due to an error. (id:32)
 
Последнее редактирование: