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

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

MyDC.ru _ Скрипты для RusHub'а _ HubTopic

Автор: Saymon 25.7.2010, 22:48

Название: HubTopic
Автор: alex82
Перевод под RusHub: Saymon
Описание: Скрипт позволяет устанавливать тему чата с использованием команды $HubTopic.
Есть возможность смены через меню.

 HubTopic.rar ( 1.24 килобайт ) : 97
 

Автор: Otshelnik-Fm 27.7.2010, 18:12

Заметил багу: Когда нажимаешь "Прислать меню" то тема чата снова пишется в главный чат .

("Прислать меню" - это новая функция которая используется в некоторых скриптах для экономии траффика)

Цитата
[19:04:06] <RusHub> Тема чата установлена.
[19:04:06] *** Тема чата хаба: О чудо! Северный ветер.. Мороз и снег. Вопрос: - Нафига продали аляску?
[19:04:19] *** Тема чата хаба: О чудо! Северный ветер.. Мороз и снег. Вопрос: - Нафига продали аляску?
[19:04:19] <RusHub> Меню выслано


еще вопрос: устанавливается тема чата, а как сделать смену топика тоже одновременно с темой чата?


Автор: Nickolya 27.7.2010, 23:27

Скрипт менюшек выполняет функцию OnUserEnter при отсылке меню, чтобы не было повторной отправки надо заменить

Код
function OnUserEnter(UID)
    if tAccess[UID.iProfile] then
        Core.SendToUser(UID,"$UserCommand 1 3 "..tCfg.Menu.."\\Установить тему$<%[mynick]> !хабтопик %[line:Введите тему чата]|")
        Core.SendToUser(UID,"$UserCommand 0 3")
        Core.SendToUser(UID,"$UserCommand 1 3 "..tCfg.Menu.."\\Удалить тему$<%[mynick]> !хабтопик офф|")
    end
    if sHubTopic then
        Core.SendToUser(UID,"$HubTopic "..sHubTopic)
    end
end
на
Код
function OnUserEnter(UID)
    if sHubTopic then
        Core.SendToUser(UID,"$HubTopic "..sHubTopic)
    end
    ContextMenu(UID)
end

function ContextMenu(UID)
    if tAccess[UID.iProfile] then
        Core.SendToUser(UID,"$UserCommand 1 3 "..tCfg.Menu.."\\Установить тему$<%[mynick]> !хабтопик %[line:Введите тему чата]|")
        Core.SendToUser(UID,"$UserCommand 0 3")
        Core.SendToUser(UID,"$UserCommand 1 3 "..tCfg.Menu.."\\Удалить тему$<%[mynick]> !хабтопик офф|")
    end
end


А чтобы сменить топик надо отправлять еще и $HubName, но надо не забыть в нем имя хаба big_smile.gif

Автор: Saymon 27.7.2010, 23:29

да, скрипт перепиливался для использования без ContextMenu

Автор: Setuper 28.7.2010, 9:17

Для смены топика можно использовать функцию:

Код
Core.SetConfig("sTopic", "Новый топик")

Эта функция автоматически изменяет топик (приписку к имени хаба) в настройках и отправляет всем пользователям хаба команду $HubName с именем хаба и изменённым топиком, а новые пользователи при входе на хаб будут видеть уже изменённый топик.

Кстати, для того, чтобы не отсылать контекстные менюшки при входе, а отсылать только по команде нужно писать так:

Код
function OnUserEnter(UID)
    if sHubTopic then
        Core.SendToUser(UID,"$HubTopic "..sHubTopic)
    end
    --ContextMenu(UID)
end

То есть НЕ вызывать функцию ContextMenu при входе. Функция ContextMenu будет автоматически вызываться скриптом ContextMenu при отсылке нужной команды. Вот это действительно будет экономия трафика и нагрузки.

Автор: Otshelnik-Fm 28.7.2010, 18:44

Цитата
[19:38:11] <RusHub> Тема чата установлена.
[19:38:11] *** Тема чата хаба: в Москве есть деньги, есть работа, там есть жизнь... Но нет там воздуха свежего. Хоть чего - то у них там не будет. $ConnectToMe -=makc=- 10.99.55.231:14125


а это выдал после внесения изменений от Nickolya и Setuper. смена темы чата произошла через секунд 5. Не сразу.

Проверил повторно:

Цитата
[19:40:37] <RusHub> Тема чата установлена.
[19:40:37] *** Тема чата хаба: тест2$ConnectToMe Дикий 10.99.55.231:14125


Заменил так:

Код
function OnUserEnter(UID)
    if sHubTopic then
        Core.SendToUser(UID,"$HubTopic "..sHubTopic)
    end
    --ContextMenu(UID)
end

function ContextMenu(UID)
    if tAccess[UID.iProfile] then
        Core.SendToUser(UID,"$UserCommand 1 3 "..tCfg.Menu.."\\Установить тему$<%[mynick]> !хабтопик %[line:Введите тему чата]|")
        Core.SendToUser(UID,"$UserCommand 0 3")
        Core.SendToUser(UID,"$UserCommand 1 3 "..tCfg.Menu.."\\Удалить тему$<%[mynick]> !хабтопик офф|")
    end
end


а если по варианту Nickolya то:

Цитата
[19:43:49] <RusHub> Тема чата установлена.
[19:43:49] *** Тема чата хаба: в Москве есть деньги, есть работа, там есть жизнь... Но нет там воздуха свежего. Хоть чего - то у них там не будет.$SR Otshelnik-Fм Кач\Games\ALAWAR games\[3] ПОИСК ПРЕДМЕТОВ, ГОЛОВОЛОМКИ\Легенды странствий. Начало 1/6TTH:BUAAAACWDVHABQH4CUCHAYLVBAAAAAAAAAAAAAA (10.99.55.231:411)Дикий


тоже глюк.

Автор: Setuper 28.7.2010, 19:16

ну так замени | на &#124;
сколько раз уже натыкались на эти грабли?)))

Код
Core.SendToUser(UID,"$UserCommand 1 3 "..tCfg.Menu.."\\Установить тему$<%[mynick]> !хабтопик %[line:Введите тему чата]&#124;")

Автор: Otshelnik-Fm 28.7.2010, 19:22

почти год я дремал и не пользовался lua. а если еще знал и забыл... Работает все отлично. Спасибо. проблема решена. И с менюшкой по запросу все хорошо вышло.

Автор: CrazyKiller 25.1.2012, 16:35

Выручите пожалуйста с ошибкой ?

Логи
./scripts/HubTopic.lua:55: warning: function 'GetConfig' was deprecated. Use 'Config[sName]' instead
./scripts/HubTopic.lua:51: warning: function 'GetConfig' was deprecated. Use 'Config[sName]' instead

Строки

Core.SendToUser(UID, "<"..Core.GetConfig("sHubBot").."> Тема чата удалена.")
Core.SendToUser(UID, "<"..Core.GetConfig("sHubBot").."> Тема чата установлена.")

RusHub 2.3.8

Автор: mod 25.1.2012, 17:20

Точно не знаю, но попробуй:

Core.SendToUser(UID, "<"..Core.Config("sHubBot")..">


А вообще говорит: функция"GetConfig' устарела. Используйте 'Config[sName]'

Автор: Setuper 25.1.2012, 17:31

Код
Core.GetConfig("sHubBot")
заменить на
Код
Config.sHubBot
или на
Код
Config["sHubBot"]
кому как больше нравится.

Однако в любом случае это не ошибка, а всего лишь предупреждение big_smile.gif

Автор: CrazyKiller 25.1.2012, 17:34

а у меня чёт Топик не меняется, в чем может быть проблема ? big_smile.gif

Скрипт
path = debug.getinfo(1).source:match("^@?(.+[/\\]).-$"):gsub("\\","/")
y,n = true,false
tCfg = {
Menu = ".:: Меню Администрации ::.\\.:: Тема чата ::.",
File = path.."texts/hubtopic.txt"
}
tAccess = {
[0] = y,
[1] = y,
[2] = n,
[3] = n,
[-1] = n,
}


tData = {}

function OnStartup()
tData.Prefix = "!"
local pref = "!"
tData.ChatCmdPattern = "^%b<>%s+["..pref.."](%S+)"
tData.ChatCmdArgs = "^%b<>%s+["..pref.."]%S+%s+(.+)$"
tData.ToCmdPattern = "^%$To:%s+%S+%s+From:%s+%S+%s+%$%b<>%s+["..pref.."](%S+)"
tData.ToCmdArgs = "^%$To:%s+%S+%s+From:%s+%S+%s+%$%b<>%s+["..pref.."]%S+%s+(.+)$"

local f = io.open(tCfg.File,"r")
if f then
sHubTopic = f:read("*all")
f:close()
end
end

function OnUserEnter(UID)
if tAccess[UID.iProfile] then
Core.SendToUser(UID,"$UserCommand 1 3 "..tCfg.Menu.."\\.:: Установить тему ::.$<%[mynick]> !хабтопик %[line:Введите тему чата]|")
Core.SendToUser(UID,"$UserCommand 0 3")
Core.SendToUser(UID,"$UserCommand 1 3 "..tCfg.Menu.."\\.:: Удалить тему ::.$<%[mynick]> !хабтопик офф|")
end
if sHubTopic then
Core.SendToUser(UID,"$HubTopic "..sHubTopic)
end
end
function OnChat(UID,data)
if tAccess[UID.iProfile] then
local cmd = data:match(tData.ChatCmdPattern)
if cmd and cmd == "хабтопик" then
data = data:match(tData.ChatCmdArgs)
if data then
if data:lower() == "офф" then
sHubTopic = nil
Core.SendToUser(UID, "<"..Config.sHubBot.."> Тема чата удалена.")
Save()
else
sHubTopic = data
Core.SendToUser(UID, "<"..Config.sHubBot.."> Тема чата установлена.")
Core.SendToAll("$HubTopic "..sHubTopic)
Save()
end
else
Core.SendToUser(UID, "<"..Config.sHubBot.."> Ошибка синтаксиса команды. Синтаксис: "..tData.Prefix.."хабтопик <тема чата/офф>.")
end
return true
end
end
end

function Save()
if sHubTopic then
local f = io.open(tCfg.File,"w")
if f then
f:write(sHubTopic)
f:close()
else
error("Unable to open file "..tCfg.File)
end
else
os.remove(tCfg.File)
end
end