Версия для печати темы
MyDC.ru _ Помощь по скриптам для PtokaX _ Texts
Автор: THE STRELOK 9.3.2009, 7:29
Помгите разобраться с текстовыми файлами, которые содержатся в папке /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
не работает :(
Автор: alex82 9.3.2009, 10:18
Цитата(THE STRELOK @ 9.3.2009, 6:29)
не работает :(
Естественно. В API птоки нету функций rules и motd, зато есть функция ChatArrival.
Автор: THE STRELOK 9.3.2009, 10:21
И с этой функцией пробывал, не получается :(
Автор: Wariner 9.3.2009, 10:25
Ты понимаешь что ты пишешь? Все команды отлавливаются в функции ChatArrival
вот это чушь
Код
local _,_,sData = string.find(Core.GetPtokaXPath().."texts/"..rulesfile.."")
и дальше ты вводишь переменную для нахождения команды а проверку не вводишь.
в общем не понятно
Автор: alex82 9.3.2009, 10:35
Код
function ChatArrival(user, data)
data = string.sub(data,1,-2) --Удаляем из data символ окончания команды (|)
local _,_,pre,cmd = string.find(data, "^%b<>%s+(%p)(%S+)") --Пытаемся найти в data префикс команды и саму команду
--Догадайся сам, что писать дальше
end
Автор: THE STRELOK 9.3.2009, 10:36
К сожелению я пробывал и с функцией ChatArrival, всё ранво не работает. Если эта строка неправильна
Код
local _,_,sData = string.find(Core.GetPtokaXPath().."texts/"..rulesfile.."")
то скажите, пожалуйста, как нужно сделать, и как сделать так, чтобы при вводе команды текст файла rules.txt например выводился в гл. чат, и как минимум с 2 префиксами ( + и ! ) команда работала
Автор: Wariner 9.3.2009, 10:48
http://mydc.ru/ipb.html?s=&showtopic=1164&view=findpost&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
Автор: THE STRELOK 9.3.2009, 10:49
Вот, получилось, но содержание файла 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
Автор: alex82 9.3.2009, 10:55
Код
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 --Конец :)
Автор: THE STRELOK 9.3.2009, 11:04
насчёт ниже приведённого кода я знаю, в некоторых скриптах это видел. Я не могу понять, как сделать так, чтобы содержанием файла 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
Автор: alex82 9.3.2009, 11:10
Мало вставить код, надо ещё вызвать функцию:
Код
message = loadtextfiles(Core.GetPtokaXPath().."texts/"..rulesfile)
PS. В функции чтения файла лучше ничего не меняй.
Автор: Wariner 9.3.2009, 11:12
Код
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) какую нибудь информацию то её надо получать по имени функции с параметрами!
Автор: THE STRELOK 9.3.2009, 11:22
Не работает :(
Цитата
texts.lua:15:bad argument #1 to 'open' (string expected, got nil)
Автор: Sephiroth_Lukaw 9.3.2009, 11:27
fix
Код
Core.SendToUser(tUser, "<"..rulesbot.."> "..loadtextfiles(rulesfile))
Автор: THE STRELOK 9.3.2009, 12:23
Скрипт работает, но содержание файла rules.txt не выводится, в чат поступает пустое сообщение от бота
Спасибо, заработало!
Есть ещё одна правда проблема. Команда !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
Автор: Wariner 9.3.2009, 12:32
Код
if cmd == "!rules" then
Core.SendPmToUser(tUser, rulesbot, loadtextfiles(rulesfile))
return true
end
Автор: THE STRELOK 9.3.2009, 12:44
спасибо!
Автор: SlavaX 12.3.2009, 23:00
Кинь, что в итоге получилось, ато я запутался...
Автор: THE STRELOK 13.3.2009, 6:26
Прошу ;)
Автор: SlavaX 13.3.2009, 17:07
За такие вещи вынужден поблагодарить)