myDC.ru

Здравствуйте, гость ( Вход | Регистрация )

 
 
Ответить в данную темуНачать новую тему

> Texts

Теги
Нет тегов для показа
Accelerator
сообщение 9.3.2009, 7:29
Сообщение #1


Developer
******

Группа: Модераторы
Сообщений: 541
Регистрация: 11.11.2008
Пользователь №: 1 075
Спасибо сказали: 244 раза




Помгите разобраться с текстовыми файлами, которые содержатся в папке /texts. Вообщем я хочу сделать так, чтобы каждый текстовый файл выводился от определённого бота, и либо в main чат либо в PM. Вот мои наброски:

Код
rulesbot = "RULES"
rulesfile = "rules.txt"

motdbot = "MOTD"
motdfile = "motd.txt"

rules = function(sNick, cmd, sData)
        local _,_,sData = string.find(Core.GetPtokaXPath().."texts/"..rulesfile.."")
    local _,_,cmd = string.find(sData, "%b<>%s+(%S*)")
Core.SendPmToNick(sNick, "<"..rulesbot.."> "..sData)
end

motd = function(sNick, cmd, sData)
        local _,_,sData = string.find(Core.GetPtokaXPath().."texts/"..motdfile.."")
    local _,_,cmd = string.find(sData, "%b<>%s+(%S*)")
Core.SendToNick(sNick, "<"..motdbot.."> "..sData)
end

не работает :(
Go to the top of the page
+Quote Post
alex82
сообщение 9.3.2009, 10:18
Сообщение #2


Местный
*******

Группа: Неактивированные
Сообщений: 908
Регистрация: 26.12.2008
Пользователь №: 1 574
Спасибо сказали: 1406 раз




Цитата(THE STRELOK @ 9.3.2009, 6:29) *
не работает :(

Естественно. В API птоки нету функций rules и motd, зато есть функция ChatArrival.
Go to the top of the page
+Quote Post
Accelerator
сообщение 9.3.2009, 10:21
Сообщение #3


Developer
******

Группа: Модераторы
Сообщений: 541
Регистрация: 11.11.2008
Пользователь №: 1 075
Спасибо сказали: 244 раза




И с этой функцией пробывал, не получается :(
Go to the top of the page
+Quote Post
Wariner
сообщение 9.3.2009, 10:25
Сообщение #4


Самый главный активист :-D
***********

Группа: Модераторы
Сообщений: 2 790
Регистрация: 29.6.2008
Из: г. Тула
Пользователь №: 97
Спасибо сказали: 440 раз




Ты понимаешь что ты пишешь? Все команды отлавливаются в функции ChatArrival
вот это чушь
Код
local _,_,sData = string.find(Core.GetPtokaXPath().."texts/"..rulesfile.."")

и дальше ты вводишь переменную для нахождения команды а проверку не вводишь.
в общем не понятно
Go to the top of the page
+Quote Post
alex82
сообщение 9.3.2009, 10:35
Сообщение #5


Местный
*******

Группа: Неактивированные
Сообщений: 908
Регистрация: 26.12.2008
Пользователь №: 1 574
Спасибо сказали: 1406 раз




Код
function ChatArrival(user, data)
    data = string.sub(data,1,-2)    --Удаляем из data символ окончания команды (|)
    local _,_,pre,cmd = string.find(data, "^%b<>%s+(%p)(%S+)")    --Пытаемся найти в data префикс команды и саму команду
    --Догадайся сам, что писать дальше
end
Go to the top of the page
+Quote Post
Accelerator
сообщение 9.3.2009, 10:36
Сообщение #6


Developer
******

Группа: Модераторы
Сообщений: 541
Регистрация: 11.11.2008
Пользователь №: 1 075
Спасибо сказали: 244 раза




К сожелению я пробывал и с функцией ChatArrival, всё ранво не работает. Если эта строка неправильна
Код
local _,_,sData = string.find(Core.GetPtokaXPath().."texts/"..rulesfile.."")

то скажите, пожалуйста, как нужно сделать, и как сделать так, чтобы при вводе команды текст файла rules.txt например выводился в гл. чат, и как минимум с 2 префиксами ( + и ! ) команда работала
Go to the top of the page
+Quote Post
Wariner
сообщение 9.3.2009, 10:48
Сообщение #7


Самый главный активист :-D
***********

Группа: Модераторы
Сообщений: 2 790
Регистрация: 29.6.2008
Из: г. Тула
Пользователь №: 97
Спасибо сказали: 440 раз




http://mydc.ru/ipb.html?s=&showtopic=1...ost&p=11209

а для чтения текстового файла нужна функция
Код
function loadtextfiles(filename)
    local message = ""
    local f = io.open( filename, "r" )
    if f then
        message=f:read("*all")
        message=string.gsub(message,"|","")
        f:close()
    end
    return message
end
Go to the top of the page
+Quote Post
Accelerator
сообщение 9.3.2009, 10:49
Сообщение #8


Developer
******

Группа: Модераторы
Сообщений: 541
Регистрация: 11.11.2008
Пользователь №: 1 075
Спасибо сказали: 244 раза




Вот, получилось, но содержание файла rules.txt не выводится:
Код
rulesbot = "RULES"
rulesfile = Core.GetPtokaXPath().."texts/rules.txt"

function ChatArrival(user, data)
    data = string.sub(data,1,-2)
    local _,_,pre,cmd = string.find(data, "^%b<>%s+(%p)(%S+)")
    if cmd == "rules" then
    Core.SendToUser(user, "<"..rulesbot.."> "..rulesfile)
end
return true
end

вместо этого в чат поступает следующие:
Цитата
[12:47:35] <RULES> D:/DELETA HUB/PtokaX_0.4.1.1/texts/rules.txt
Go to the top of the page
+Quote Post
alex82
сообщение 9.3.2009, 10:55
Сообщение #9


Местный
*******

Группа: Неактивированные
Сообщений: 908
Регистрация: 26.12.2008
Пользователь №: 1 574
Спасибо сказали: 1406 раз




Код
return true
end

Поздравляю, ты сделал глобальную заглушку на чат )


Код
    if pre and (pre == "+" or pre == "!") then    --Если префикс найден, и он такой как нам нужен, то...
        if cmd == "rules" then    --Если команда rules, то...
            --Здесь обработка команды rules
            return true
        elseif cmd == "motd" then    --Ну а если motd, то...
            --Здесь обработка команды motd
            return true
        end
    end    --Конец :)
Go to the top of the page
+Quote Post
Accelerator
сообщение 9.3.2009, 11:04
Сообщение #10


Developer
******

Группа: Модераторы
Сообщений: 541
Регистрация: 11.11.2008
Пользователь №: 1 075
Спасибо сказали: 244 раза




насчёт ниже приведённого кода я знаю, в некоторых скриптах это видел. Я не могу понять, как сделать так, чтобы содержанием файла rules.txt выводилось юзеру. Вставлял код код, который написал выше Wariner, не работает.

Код
rulesbot = "RULES"
rulesfile = "rules.txt"

function loadtextfiles(filename)
    local message = "rules"
    local f = io.open( filename, "..rulesfile.." )
    if f then
        message=f:read("*all")
        message=string.gsub(message,"|","")
        f:close()
    end
    return message
end
function ChatArrival(user, data)
    data = string.sub(data,1,-2)
    local _,_,pre,cmd = string.find(data, "^%b<>%s+(%p)(%S+)")
    if cmd == "rules" then
    Core.SendToUser(user, "<"..rulesbot.."> "..message)
end
return true
end
Go to the top of the page
+Quote Post
alex82
сообщение 9.3.2009, 11:10
Сообщение #11


Местный
*******

Группа: Неактивированные
Сообщений: 908
Регистрация: 26.12.2008
Пользователь №: 1 574
Спасибо сказали: 1406 раз




Мало вставить код, надо ещё вызвать функцию:
Код
message = loadtextfiles(Core.GetPtokaXPath().."texts/"..rulesfile)


PS. В функции чтения файла лучше ничего не меняй.
Go to the top of the page
+Quote Post
Wariner
сообщение 9.3.2009, 11:12
Сообщение #12


Самый главный активист :-D
***********

Группа: Модераторы
Сообщений: 2 790
Регистрация: 29.6.2008
Из: г. Тула
Пользователь №: 97
Спасибо сказали: 440 раз




Код
rulesbot = "RULES"
rulesfile = Core.GetPtokaXPath().."/text/rules.txt"

function ChatArrival(tUser, sData)
    sData = string.sub(sData,1,-2)
    local _,_,cmd = string.find(sData, "%b<>%s+(%S+)")
    if cmd == "!rules" then
         Core.SendToUser(tUser, "<"..rulesbot.."> "..loadtextfiles(rulesfile))
         return true
    end    
end

function loadtextfiles(filename)
    local message = ""
    local f = io.open( filename, "r" )
    if f then
        message=f:read("*all")
        message=string.gsub(message,"|","")
        f:close()
    end
    return message
end



Если функция ретурнит(return) какую нибудь информацию то её надо получать по имени функции с параметрами!
Go to the top of the page
+Quote Post
Accelerator
сообщение 9.3.2009, 11:22
Сообщение #13


Developer
******

Группа: Модераторы
Сообщений: 541
Регистрация: 11.11.2008
Пользователь №: 1 075
Спасибо сказали: 244 раза




Не работает :(

Цитата
texts.lua:15:bad argument #1 to 'open' (string expected, got nil)
Go to the top of the page
+Quote Post
Sephiroth_Lukaw
сообщение 9.3.2009, 11:27
Сообщение #14


Освоившийся участник
*****

Группа: Пользователи
Сообщений: 307
Регистрация: 11.7.2008
Пользователь №: 173
Спасибо сказали: 31 раз




fix
Код
Core.SendToUser(tUser, "<"..rulesbot.."> "..loadtextfiles(rulesfile))
Go to the top of the page
+Quote Post
Accelerator
сообщение 9.3.2009, 12:23
Сообщение #15


Developer
******

Группа: Модераторы
Сообщений: 541
Регистрация: 11.11.2008
Пользователь №: 1 075
Спасибо сказали: 244 раза




Скрипт работает, но содержание файла rules.txt не выводится, в чат поступает пустое сообщение от бота

Спасибо, заработало! big_smile.gif

Есть ещё одна правда проблема. Команда !motd у меня на хабе теперь выводится в main чат, команда !rules должна выводиться в PM юзеру от бота с именем '<RULES>', вместо этого при наборе команды !rules высылается содержанием текст файла в PM юзеру, но от гл. бота хаба, а не от 'RULES'.

Цитата
bad argument count to 'SendPmToUser' (3 expected, got 2)


Помогите исправить:
Код
    if cmd == "!rules" then
         Core.SendPmToUser(tUser, "<"..rulesbot.."> "..loadtextfiles(rulesfile))
         return true
    end
Go to the top of the page
+Quote Post
Wariner
сообщение 9.3.2009, 12:32
Сообщение #16


Самый главный активист :-D
***********

Группа: Модераторы
Сообщений: 2 790
Регистрация: 29.6.2008
Из: г. Тула
Пользователь №: 97
Спасибо сказали: 440 раз




Код
    if cmd == "!rules" then
         Core.SendPmToUser(tUser, rulesbot, loadtextfiles(rulesfile))
         return true
    end
Go to the top of the page
+Quote Post
Accelerator
сообщение 9.3.2009, 12:44
Сообщение #17


Developer
******

Группа: Модераторы
Сообщений: 541
Регистрация: 11.11.2008
Пользователь №: 1 075
Спасибо сказали: 244 раза




спасибо!
Go to the top of the page
+Quote Post
SlavaX
сообщение 12.3.2009, 23:00
Сообщение #18


Начинающий
*

Группа: Пользователи
Сообщений: 11
Регистрация: 12.10.2008
Пользователь №: 785
Спасибо сказали: 0 раз




Кинь, что в итоге получилось, ато я запутался...
Go to the top of the page
+Quote Post
Accelerator
сообщение 13.3.2009, 6:26
Сообщение #19


Developer
******

Группа: Модераторы
Сообщений: 541
Регистрация: 11.11.2008
Пользователь №: 1 075
Спасибо сказали: 244 раза




Прошу ;)
Прикрепленные файлы
Прикрепленный файл  texts.rar ( 880 байт ) Кол-во скачиваний: 22
 


Спасибо сказали:
Go to the top of the page
+Quote Post
SlavaX
сообщение 13.3.2009, 17:07
Сообщение #20


Начинающий
*

Группа: Пользователи
Сообщений: 11
Регистрация: 12.10.2008
Пользователь №: 785
Спасибо сказали: 0 раз




За такие вещи вынужден поблагодарить)
Go to the top of the page
+Quote Post

Ответить в данную темуНачать новую тему
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 



RSS Сейчас: 27.11.2024, 3:28