RakSamp отправка в ТГ

7 СМЕРТНЫХ ГРЕХОВ

Известный
Автор темы
524
164
Суть в чем, как сделать отправку 40 строк потом ещё 40 и т.д

Так как у меня есть список банов -
1677344103528.png
191272

список постояно дополняется, но телеграм не дает сразу отправить целый список а только 40+ строк

RakSamp cods:
    if text:find("бот бан лист") then
        local f = io.open(bot_name..'/Bans.txt', "r")
        for line in io.lines(bot_name..'/Bans.txt') do
            if line:match("(.*) (.*) %[(%d+)%] оффлайн забанил игрока (.*) на (%d+) дней, причина: (.*)") then
                adminprefix, admname, admid, banname, bantime, banreason = line:match('(.*) (.*) %[(%d+)%] оффлайн забанил игрока (.*) на (%d+) дней, причина: (.*)')
                local f = io.open(bot_name..'/banlist.ini', "a")
                tempnumber = tempnumber + 1
                f:write(string.format(" %s. %s %s [%s] оффлайн забанил игрока %s на %s дней, причина: %s\n", tempnumber, adminprefix, admname, admid, banname, bantime, banreason))
                f:close()
            end
            if line:match("(.*) (.*) %[(%d+)%] забанил игрока (.*)%[(%d+)%] на (%d+) дней, причина: (.*)") then
                adminprefix, admname, admid, banname, banid, bantime, banreason = line:match('(.*) (.*) %[(%d+)%] забанил игрока (.*)%[(%d+)%] на (%d+) дней, причина: (.*)')
                local f = io.open(bot_name..'/banlist.ini', "a")
                tempnumber = tempnumber + 1
                f:write(string.format("\n %s. %s %s [%s] забанил игрока %s[%s] на %s дней, причина: %s\n", tempnumber, adminprefix, admname, admid, banname, banid, bantime, banreason))
                f:close()
            end
        end
        newTask(function()
            wait(2000)
            local f = io.open(bot_name..'/banlist.ini', "r")
            banlist = f:read('*a')
            f:close()
            STM(banlist)
            local f = io.open(bot_name..'/banlist.ini', 'w')
            tempnumber = 0
        end)
        sendInput("/a отправил бан лист в telegram")
    end
 
  • Ха-ха
  • Нравится
Реакции: mihagrom и e2e
Решение
Посмотреть вложение 192967
Посмотреть вложение 192970

upd: не выдает уже ошибку выше
Поставил sleep побольше и кол-во символов но всеравно максимум отправляет 39 банов из листа Посмотреть вложение 192971
В этом коде добавлена переменная "count", которая считает количество отправленных банов. Когда "count" достигает 40, делаем паузу в 1 секунду и сбрасываем "count" до 0, чтобы начать отправлять следующий пакет. Таким образом, будет отправлять список банов пакетами по 40 банов.

Проверяй. У меня нету доступа к игре чтобы самому проверять.


Lua:
if text:find("бот бан лист") then
    local f = io.open(bot_name..'/Bans.txt', "r")
    for line in io.lines(bot_name..'/Bans.txt') do
        -- ... ваш код, который добавляет новые строки в banlist.ini
    end...

yung milonov

Известный
1,009
519

7 СМЕРТНЫХ ГРЕХОВ

Известный
Автор темы
524
164

mihagrom

Участник
98
88
Lua:
function splitByChunk(text, chunkSize)
    local s = {}
    for i=1, #text, chunkSize do
        s[#s+1] = text:sub(i,i+chunkSize - 1)
    end
    return s
end

-- usage example
local st = splitByChunk("0123456789",3) -- 0123456789 - содержимое | 3 - по сколько символов разбивает
for i,v in ipairs(st) do
   print(v)
end

-- outputs
--     012
--     345
--     678
--     9

вот пример как разбить содержимое на несколько
 

Garug

Потрачен
9
3
Ты можете использовать цикл while для отправки содержимого файла построчно с паузой в 1 секунду между каждой отправкой, например:

В этом примере я взял очередной кусок из 4000 символов и отправил
его с помощью функции sendInput(). Затем я делаю паузу в 1 секунду с помощью функции wait(1000) и продолжаем отправку следующего куска. Повторяю это до тех пор, пока не отправится вся строка.

Lua:
if text:find("бот бан лист") then
    local f = io.open(bot_name..'/Bans.txt', "r")
    for line in io.lines(bot_name..'/Bans.txt') do
        -- ... ваш код, который добавляет новые строки в banlist.ini
    end
    sendInput("/a отправляю бан лист в telegram")
    local f = io.open(bot_name..'/banlist.ini', "r")
    local banlist = f:read('*a')
    f:close()

    -- отправка содержимого файла построчно
    local i = 1
    while i <= #banlist do
        local chunk = banlist:sub(i, i + 3999) -- берем очередной кусок из 4000 символов
        sendInput(chunk)
        wait(1000) -- пауза в 1 секунду между отправками
        i = i + #chunk
    end

    sendInput("/a отправил бан лист в telegram")
end
 

7 СМЕРТНЫХ ГРЕХОВ

Известный
Автор темы
524
164
Ты можете использовать цикл while для отправки содержимого файла построчно с паузой в 1 секунду между каждой отправкой, например:

В этом примере я взял очередной кусок из 4000 символов и отправил
его с помощью функции sendInput(). Затем я делаю паузу в 1 секунду с помощью функции wait(1000) и продолжаем отправку следующего куска. Повторяю это до тех пор, пока не отправится вся строка.

Lua:
if text:find("бот бан лист") then
    local f = io.open(bot_name..'/Bans.txt', "r")
    for line in io.lines(bot_name..'/Bans.txt') do
        -- ... ваш код, который добавляет новые строки в banlist.ini
    end
    sendInput("/a отправляю бан лист в telegram")
    local f = io.open(bot_name..'/banlist.ini', "r")
    local banlist = f:read('*a')
    f:close()

    -- отправка содержимого файла построчно
    local i = 1
    while i <= #banlist do
        local chunk = banlist:sub(i, i + 3999) -- берем очередной кусок из 4000 символов
        sendInput(chunk)
        wait(1000) -- пауза в 1 секунду между отправками
        i = i + #chunk
    end

    sendInput("/a отправил бан лист в telegram")
end
1678478167153.png

1678478192200.png


upd: не выдает уже ошибку выше
Поставил sleep побольше и кол-во символов но всеравно максимум отправляет 39 банов из листа
1678478660998.png
 
Последнее редактирование:

Garug

Потрачен
9
3
Посмотреть вложение 192967
Посмотреть вложение 192970

upd: не выдает уже ошибку выше
Поставил sleep побольше и кол-во символов но всеравно максимум отправляет 39 банов из листа Посмотреть вложение 192971
В этом коде добавлена переменная "count", которая считает количество отправленных банов. Когда "count" достигает 40, делаем паузу в 1 секунду и сбрасываем "count" до 0, чтобы начать отправлять следующий пакет. Таким образом, будет отправлять список банов пакетами по 40 банов.

Проверяй. У меня нету доступа к игре чтобы самому проверять.


Lua:
if text:find("бот бан лист") then
    local f = io.open(bot_name..'/Bans.txt', "r")
    for line in io.lines(bot_name..'/Bans.txt') do
        -- ... ваш код, который добавляет новые строки в banlist.ini
    end
    sendInput("/a отправляю бан лист в telegram")
    local f = io.open(bot_name..'/banlist.ini', "r")
    local banlist = f:read('*a')
    f:close()

    -- отправка содержимого файла пакетами по 40 банов
    local i = 1
    local count = 0
    while i <= #banlist do
        local chunk = banlist:sub(i, i + 3999) -- берем очередной кусок из 4000 символов
        sendInput(chunk)
        count = count + 1
        if count >= 40 then -- отправляем пакет из 40 банов
            wait(1000) -- пауза в 1 секунду между отправками
            count = 0
        end
        i = i + #chunk
    end

    sendInput("/a отправил бан лист в telegram")
end