Версия для печати темы
MyDC.ru _ Помощь по скриптам для PtokaX _ Топик - Приветственное Сообщение
Автор: THE STRELOK 29.3.2009, 10:33
Помогите со скриптом... Вообщем заметил в DBHUB такую вещь:
Цитата
[10:09:37] <Robot> Тема: 'Добро пожаловать!', установил Admin (Mon Oct 19 22:21:10 2008)
[10:09:37] <Robot> Привет STRELOK, добро пожаловать на HUB. Ваш IP: 10.2.136.203
Захотелось мне тоже прикрепить такое себе на хаб, вот мои наброски:
Код
sBot = SetMan.GetString(21)
function UserConnected(tUser)
Core.SendToUser(tUser, "<"..sBot.."> Тема: '"..SetMan.GetString(не помню цифру).."', установил "..user.sNick.." (%d.%m.%y / %H:%M:%S)")
Core.SendToUser(tUser, "<"..sBot.."> Привет "..tUser.sNick..", добро пожаловать на "..SetMan.GetString(0)..". Ваш IP: "..tUser.sIP)
end
RegConnected = UserConnected
OpConnected = UserConnected
Помогите доработать
Автор: Setuper 29.3.2009, 11:23
ты хочешь чтобы мы сделали сохранение истории смены топика?
Автор: Wariner 29.3.2009, 11:24
цифра топика 10
а чтобы знать кто установил и когда надо писать другой кусок скрипта который отслеживает команду топика записывает того кто пользовал её и дату в файл. после чего от туда выводит в приветствие!
Автор: THE STRELOK 29.3.2009, 11:44
Код
TopLog = {}
filename = "TopicLogs\\"
sBot = SetMan.GetString(21)
function UserConnected(tUser)
Core.SendToUser(tUser, "<"..sBot.."> Тема: '"..SetMan.GetString(10).."', установил "..user.sNick.." (%d.%m.%y / %H:%M:%S)")
Core.SendToUser(tUser, "<"..sBot.."> Привет "..tUser.sNick..", добро пожаловать на "..SetMan.GetString(0)..". Ваш IP: "..tUser.sIP)
end
RegConnected = UserConnected
OpConnected = UserConnected
SetMan.SetString(10,NewTopic)
day = os.date("[%d.%m.%y].txt")
if io.open(filename..day) == nil then io.open(filename..day,"w") end
dofile(filename..day)
i = #TopLog+1
CurTime = os.date("[%H:%M-%d.%m.%y]")
TopLog[i] = "~"..CurTime.."~ ~"..tUser.sNick.."~ ~"..NewTopic.."~"
SaveToFile(filename..day, TopLog, "TopLog")
function Serialize(tTable, sTableName, sTab)
assert(tTable, "tTable equals nil");
assert(sTableName, "sTableName equals nil");
assert(type(tTable) == "table", "tTable must be a table!");
assert(type(sTableName) == "string", "sTableName must be a string!");
sTab = sTab or "";
sTmp = ""
sTmp = sTmp..sTab..sTableName.." = {\n"
for key, value in pairs(tTable) do
local sKey = (type(key) == "string") and string.format("[%q]",key) or string.format("[%d]",key);
if(type(value) == "table") then
sTmp = sTmp..Serialize(value, sKey, sTab.."\t");
else
local sValue = (type(value) == "string") and string.format("%q",value) or tostring(value);
sTmp = sTmp..sTab.."\t"..sKey.." = "..sValue
end
sTmp = sTmp..",\n"
end
sTmp = sTmp..sTab.."}"
collectgarbage(collect)
return sTmp
end
function SaveToFile(file , table , tablename)
local handle = io.open(file,"w+")
handle:write(Serialize(table, tablename))
handle:flush()
handle:close()
end
Вроде бы это и есть функция сохранения топика, только вот не знаю, правильно ли я её сконфигурировал
Автор: Setuper 29.3.2009, 11:51
бред написан
этот кусок:
Код
SetMan.SetString(10,NewTopic)
day = os.date("[%d.%m.%y].txt")
if io.open(filename..day) == nil then io.open(filename..day,"w") end
dofile(filename..day)
i = #TopLog+1
CurTime = os.date("[%H:%M-%d.%m.%y]")
TopLog[i] = "~"..CurTime.."~ ~"..tUser.sNick.."~ ~"..NewTopic.."~"
SaveToFile(filename..day, TopLog, "TopLog")
будет выполняться только пи загрузке скрипта, да и написан он с ошибками
Автор: Wariner 29.3.2009, 11:51
вообще не о чём...
1)поиск команды в ChatArrival
2)по нахождению записываем в таблицу 2строчки дату и юзера
3) сохраняем таблицу.
4)выводим из неё данные при заходе юзера.
Автор: THE STRELOK 29.3.2009, 12:31
Код
local tProfile = {
[0] = 1,
[1] = 1,
[2] = 1,
}
local filename = "Topic.tbl"
local Bot = SetMan.GetString(21)
tTopic = {
sDate = "unknown",
SetUser = "unknown",
Topic = "unknown"
}
function OnStartup()
if loadfile(filename) then
dofile(filename)
end
end
function UserConnected(tUser)
Core.SendToUser(tUser, "<"..sBot.."> Тема: '"..tTopic.Topic.."', установил "..tTopic.SetUser.." ("..tTopic.CurTime..")")
Core.SendToUser(tUser, "<"..sBot.."> Привет "..tUser.sNick..", добро пожаловать на "..SetMan.GetString(0)..". Ваш IP: "..tUser.sIP)
end
RegConnected = UserConnected
OpConnected = UserConnected
function ChatArrival(user,sData)
sData = string.sub(sData,1,-2)
local cmd = sData:match"%b<>%s+(%S+)"
if cmd == "!topic" then
if tProfile[tUser.iProfile] == 1 then
local sMsg = sData:match"%b<>%s+%S+%s+(.*)"
if not sMsg then
Core.SendToUser(user, "<"..Bot.."> Вы не ввели текст топика")
return true
end
tTopic = {
sDate = os.date"%d.%m.%y / %H:%M:%S",
SetUser = user.sNick,
Topic = sMsg
}
SaveToFile(filename, tTopic, "tTopic")
return true
end
end
end
function Serialize(tTable, sTableName, sTab)
sTab = sTab or "";
sTmp = ""
sTmp = sTmp..sTab..sTableName.." = {\n"
for key, value in pairs(tTable) do
local sKey = (type(key) == "string") and string.format("[%q]",key) or string.format("[%d]",key);
if(type(value) == "table") then
sTmp = sTmp..Serialize(value, sKey, sTab.."\t");
else
local sValue = (type(value) == "string") and string.format("%q",value) or tostring(value);
sTmp = sTmp..sTab.."\t"..sKey.." = "..sValue
end
sTmp = sTmp..",\n"
end
sTmp = sTmp..sTab.."}"
return sTmp
end
function SaveToFile(file , table , tablename)
local handle = io.open(file,"w+")
handle:write(Serialize(table, tablename))
handle:flush()
handle:close()
end
Вроде так написал? Но в таблицу не сохраняет...
Цитата
32: attempt to call global 'SaveToFile' (a nil value)
Автор: Setuper 29.3.2009, 12:38
нужно последний end переместить до функции Serialize
я отредактировал твой пост
Автор: THE STRELOK 29.3.2009, 12:47
Ошибка
Цитата
:56: bad argument #1 to 'open' (string expected, got table)
Автор: Setuper 29.3.2009, 13:17
исправил ещё и ещё раз))
Автор: THE STRELOK 29.3.2009, 13:25
Цитата(Setuper @ 29.3.2009, 14:17)
исправил ещё и ещё раз))
Уже видел
спасибо. Ставил, внёс небольшие изменения:
Исправил:
1. При вводе команды !topic <текст> глушился чат (исправил)
2. Исправил "..tTopic.CurTime.." на "..tTopic.sDate.." (баг с датой)
3. Поправил строчку if tProfile[tUser.iProfile] == 1 then, чтобы работала команда !topic
вообщем, вот исправленный вариант