Версия для печати темы
MyDC.ru _ Служебные скрипты [PtokaX] _ Announcements
Автор: STRELOK 27.6.2009, 16:40
Название: Announcements
Версия API: 2
Версия скрипта: 2.0
Автор: STRELOK
Описание:
Публикация объявления администрацией хаба. Выводит объявление юзеру при подключении к хабу
Возможности:
1. Показ объявления перед входом юзера
2. Показы даты и времени, когда было установлено объявление
3. Выбор кому будет доступно публиковать сообщения
4. Вывод сообщения о новом объявлении всем
5. Выбор сколько объявлений выводит при подключении пользователя и сколько будет хранится в таблице
6. Удаление объявлений по номеру.
Автор: Drakula 1.7.2009, 19:20
Скрипт классный, вот если бы ещё добавить: удаление объявления, было бы очень замечательно, а то надоедает заходить в папку и удалять: dats.dat
Автор: intlive 1.7.2009, 20:17
Цитата(Drakula @ 2.7.2009, 0:20)
Скрипт классный, вот если бы ещё добавить: удаление объявления, было бы очень замечательно, а то надоедает заходить в папку и удалять: dats.dat
+1 Не хватает данной функции
Автор: STRELOK 3.7.2009, 8:45
Считаю, что удаление объявления, имхо, не нужно! Т.к. после публикации нового объявления, старое стирается само.
Автор: Drakula 6.7.2009, 19:02
Цитата(STRELOK @ 3.7.2009, 8:45)
Считаю, что удаление объявления, имхо, не нужно! Т.к. после публикации нового объявления, старое стирается само.
Вот прикинь ты обьявил о празднике..... и эта объява будет висеть гдето 2 месяца а то и больше...... помоему лучше сделать с удалением.
Автор: denis 15.12.2009, 22:28
[21:27] Синтаксис G:\Server\scripts\announcements.lua:88: attempt to index local 'handle' (a nil value)
в чём проблема?
Автор: Wariner 15.12.2009, 22:32
либо в путях либо в отсутствии файла который использует скрипт!
Автор: denis 15.12.2009, 22:57
Цитата(Wariner @ 15.12.2009, 22:32)
либо в путях либо в отсутствии файла который использует скрипт!
спасибо разобрался
Автор: STRELOK 9.1.2010, 16:13
Цитата(Drakula @ 1.7.2009, 21:20)
Скрипт классный, вот если бы ещё добавить: удаление объявления, было бы очень замечательно, а то надоедает заходить в папку и удалять: dats.dat
Если кому то нужна функция удаления объявления, то
после return true (на 64 строке) нужно добавить на 65 строке:
Код
elseif cmd == "!delannouncements" then
if tProfile[tUser.iProfile] == 1 or tVIP[tUser.sNick] then
tDats = {
Dats = "Нет объявлений",
Date = "unknown"
}
Core.SendToUser(tUser, ("<%s> Объявление удалено!"):format(Bot))
SaveToFile(filename, tDats, "tDats")
else
Core.SendToUser(tUser, ("<%s> У вас нет прав для использования этой команды!"):format(Bot))
end
return true
Теперь после ввода команды !delannouncements будет выводится так:
Цитата
[17:09:13] <PtokaX> Объявление администрации:
Нет объявлений (Установлено: unknown)
Думаю с менюшкой сами разберётесь как сделать
** Пошёл делать новую версию скрипта. Попробую сделать так, чтобы можно было добавлять хоть сколько объявлений и делать удаление по номеру объявления. **
Сделал 2.0. версию. Изменения в первом посту.
Автор: dimajak 26.1.2010, 13:17
Цитата(STRELOK @ 9.1.2010, 16:13)
Сделал 2.0. версию. Изменения в первом посту.
немного доработал - отключил вывод "Последние 5 сообщений администрации" при отсутствии объявлений.
announcements.rar ( 1.94 килобайт )
: 55
Автор: GYRY 23.3.2010, 20:45
Хороший скрипт. Очень актуальный для мнея, по крайней мере, НО было бы очень хорошо, если бы:
1) объявления были написаны жирным шрифтом
2) объявления появлялись в главном чате с определенной периодичностью. Раз в час или два, ну кроме появления при входе
Автор: Saymon 23.3.2010, 20:51
Цитата
1) объявления были написаны жирным шрифтом
это уже читы клиента.
Автор: GYRY 23.3.2010, 20:52
Ээээ, не понял, что значит читы клиента?
Автор: Saymon 23.3.2010, 21:15
В грэй линке есть читы которые и придают всю красоту сообщениям.
Но если у клиента нет поддержки этих самых читов то в чате такой ужас!
если хочешь сделай сам это
1) открой скрипт
2) найди текст который нужно выделеть
3) сделай следующие
Код
[b]текст который нужно выделеть[/b]
Автор: STRELOK_IS74 23.3.2010, 21:17
Цитата(GYRY @ 23.3.2010, 22:45)
2) объявления появлялись в главном чате с определенной периодичностью. Раз в час или два, ну кроме появления при входе
в функцию
OnStartup() добавляем:
Код
Upd = 3 -- Время, через которое будут посланы объявления в чат всем (в часах)
TmrMan.AddTimer(Upd*3600000, "Send")
В самый низ:
Код
function Send()
Core.SendToAll(GetAnnouncements(count))
end
Автор: GYRY 23.3.2010, 21:43
А как быть в жирным шрифтом? То что рекомендовал Saymon не вышло. Если добавляю
Код
[b] текст который нужно выделеть [/b]
пишет ошибку скрипта. Или я не то добавлял.
Автор: Saymon 23.3.2010, 22:05
покажи саму ошибку и строку в которой ошибка.
Автор: GYRY 23.3.2010, 22:55
Синтаксис [string "--[[ Название: Announcements..."]:45: unexpected symbol near '['
Скрипт очень большой, я честно сказать понятия не имею куда добавить и чего. Я первый день в этом
Автор: Saymon 23.3.2010, 22:56
покажи 45 строку
Автор: GYRY 23.3.2010, 23:02
local sMsg = sData:match"%b<>%s+%S+%s+(.*)"
Полностью скрипт выглядит так. И куда чего добавить не понятно
Код
--[[ Название: Announcements
Версия API: 2
Версия скрипта: 2.0
Автор: STRELOK
Описание:
Публикация объявления администрацией хаба. Выводит объявление юзеру при подключении к хабу
Возможности:
1. Показ объявления перед входом юзера
2. Показы даты и времени, когда было установлено объявление
3. Выбор кому будет доступно публиковать сообщения
4. Вывод сообщения о новом объявлении всем
5. Выбор сколько объявлений выводит при подключении пользователя ]]--
local tProfile = {
[0] = 1,
[1] = 0,
}
tVIP = {
["STRELOK"] = 1,
}
local Bot = SetMan.GetString(21)
local filename = Core.GetPtokaXPath().."scripts/announcements/dats.dat"
tDats = {
Dats = "Нет объявлений",
Date = "unknown"
}
sAll = 1 -- выводить сообщение о публикации нового объявление всем
count = 5 -- какое кол-во объявлений выводить при входе и сохранят в таблицу?
function OnStartup()
Upd = 1
TmrMan.AddTimer(Upd*3600000, "Send")
if loadfile(filename) then
dofile(filename)
end
end
function ChatArrival(tUser,sData)
sData = string.sub(sData,1,-2)
local cmd = sData:match"%b<>%s+(%S+)"
if cmd == "!postannouncements" then
if tProfile[tUser.iProfile] == 1 or tVIP[tUser.sNick] then
local sMsg = sData:match"%b<>%s+%S+%s+(.*)"
if not sMsg then
Core.SendToUser(tUser, "<"..Bot.."> Вы не ввели сообщение")
end
local Dat = {
sMsg,
os.date"%d.%m.%y * %H:%M:%S",
tUser.sNick,
}
table.insert(tDats, Dat)
if #tDats > count then
table.remove(tDats,1)
end
SaveToFile(filename, tDats, "tDats")
Core.SendToUser(tUser, "<"..Bot.."> Объявление '"..sMsg.."' было опубликовано!")
if sAll == 1 then
Core.SendToAll("<"..Bot.."> Новое объявление: "..sMsg)
end
else
Core.SendToUser(tUser, ("<%s> У вас нет прав для использования этой команды!"):format(Bot))
end
return true
elseif cmd == "!delannouncements" then
if tProfile[tUser.iProfile] == 1 or tVIP[tUser.sNick] then
local sNumber = sData:match"%b<>%s+%S+%s+(.*)"
for v in ipairs(tDats) do
table.remove(tDats, sNumber)
Core.SendToUser(tUser, ("<%s> Объявление №%s удалено!"):format(Bot, sNumber))
SaveToFile(filename, tDats, "tDats")
end
else
Core.SendToUser(tUser, ("<%s> У вас нет прав для использования этой команды!"):format(Bot))
end
return true
end
end
function GetAnnouncements(lines)
local x = lines
if lines > #tDats then
x,lines = #tDats,#tDats
end
x = #tDats - x
local str = ""
for i,v in ipairs(tDats) do
if i > x then
str = str.."№"..i..": "..v[1].." (Опубликовано: "..v[2].." / Автор: "..v[3]..")\n"
end
end
return str
end
function UserConnected(tUser)
local str = GetAnnouncements(count)
if str ~= "" then
str = ""..string.rep(" ",0).."Последние "..count.." объявлений администрации:\n"..str
Core.SendToUser(tUser, "<"..Bot.."> "..str)
end
if tProfile[tUser.iProfile] == 1 or tVIP[tUser.sNick] then
Core.SendToUser(tUser,"$UserCommand 1 3 Меню админа\\Опубликовать объявление$<%[mynick]> !postannouncements %[line:Введите текст]|")
Core.SendToUser(tUser,"$UserCommand 1 3 Меню админа\\Удалить объявление$<%[mynick]> !delannouncements %[line:Введите № объявления]|")
end
end
RegConnected = UserConnected
OpConnected = UserConnected
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
function Send()
Core.SendToAll(GetAnnouncements(count))
end
Автор: Saymon 23.3.2010, 23:19
вот скачал скрипт, сделал так, скрипт робит
86 стока
Код
local str = ""..string.rep(" ",0).."[b]Последние "..count.." объявлений администрации:[/b]\n"
89 стока
Код
str = str.."[b]№"..i..": "..v[1].." (Опубликовано: "..v[2].." / Автор: "..v[3]..")[/b]\n"
59 стока
Код
Core.SendToAll("<"..Bot.."> [b]Новое объявление: "..sMsg.."[/b]")
но клиента с читами у меня нет чтобы проверить выделение.
PS. Строки я пишу не считая мода с таймером.
Автор: GYRY 23.3.2010, 23:48
Ошибок нет, но на практике почему-то, пишет не жирным, но кроме написанного дает
Код
[b] [/b]
между слов. Т.е. просто буквы пишет
Автор: Saymon 23.3.2010, 23:52
какой клиент?
Автор: GYRY 23.3.2010, 23:54
FlylinkDC/ А какая разница?
Автор: Saymon 24.3.2010, 0:04
поддержка таких тегов есть только у Greylink DC++.
На фалай линке там можно сделать по другому - через !me или сделать вывод сообщений не от имени бота
т.е удалить эти теги и удалить <"..Bot..">
Но при этом я встречал следующюю проблему.
В настройках клиента включаем поддержку $HubTopic и текст который выходит без имени бота клиент и воспринимает как $HubTopic.
тоесть пишется в статусной строке
статусная стока:
Текст по запросу и без имени бота:
и статусная строка с тем текстом
Автор: GYRY 24.3.2010, 0:14
Попробовал просто напечатать что-нибудь и что бы жирным было. Вообщем при [b] от так буквы и пишет, а вот когда написал /me то написало жирным. Вопрос, как эту команду прикрутить к скрипту?
Автор: Saymon 24.3.2010, 0:18
вот это, с me ? честно говоря не знаю и думаю бредовая идея.
глянь раскрытый текст в 25 посте, отредактировал там.
Автор: Артём 24.3.2010, 0:56
Цитата(Saymon @ 23.3.2010, 23:04)
поддержка таких тегов есть только у Greylink DC++.
Не только, PeLink тоже так умеет
Цитата
В настройках клиента включаем поддержку $HubTopic и текст который выходит без имени бота клиент и воспринимает как $HubTopic.
такогой фантастики не замечал у себя
Автор: Saymon 24.3.2010, 1:01
на MyDC хабе я даже это заметил.
сорри за оффтоп
Автор: infection 27.9.2010, 18:43
альтернатива есть скрипту?
нужно что-бы выводилось инфа в чат через промежутки времени.
Автор: Alexey 28.9.2010, 1:24
Есть, да поможет тебе поиск!