Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

MyDC.ru _ Служебные скрипты [PtokaX] _ Announcements

Автор: STRELOK 27.6.2009, 16:40

Название: Announcements
Версия API: 2
Версия скрипта: 2.0
Автор: STRELOK
Описание:
Публикация объявления администрацией хаба. Выводит объявление юзеру при подключении к хабу
Возможности:
1. Показ объявления перед входом юзера
2. Показы даты и времени, когда было установлено объявление
3. Выбор кому будет доступно публиковать сообщения
4. Вывод сообщения о новом объявлении всем
5. Выбор сколько объявлений выводит при подключении пользователя и сколько будет хранится в таблице
6. Удаление объявлений по номеру.

 announcements.rar ( 1.83 килобайт ) : 471
 

Автор: 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 месяца а то и больше...... помоему лучше сделать с удалением. secret_smile.gif

Автор: 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)


Думаю с менюшкой сами разберётесь как сделать big_smile.gif

** Пошёл делать новую версию скрипта. Попробую сделать так, чтобы можно было добавлять хоть сколько объявлений и делать удаление по номеру объявления. **

Сделал 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 хабе я даже это заметил. big_smile.gif

сорри за оффтоп

Автор: infection 27.9.2010, 18:43

альтернатива есть скрипту?

нужно что-бы выводилось инфа в чат через промежутки времени.

Автор: Alexey 28.9.2010, 1:24

Есть, да поможет тебе поиск!