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

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

MyDC.ru _ Готовые скрипты для PtokaX _ ShowTopic

Автор: X-Sky 12.11.2009, 23:24

Название скрипта: ShowTopic
Версия API: 2
Автор: X-Sky
Дата написания: 13.11.09
Описание: По команде выводит в чат топик, заданный на хабе в данный момент. (может кому понадобится)
 ShowTopic_by_X_Sky_API2.lua ( 1.58 килобайт ) : 56


Вывод в чат топика по двум командам (например !топик и !топег)
 ShowTopicForAll_2com_by_X_Sky_API2.lua ( 1.65 килобайт ) : 27


Показ топика только для юзера
 ShowTopicForNick_2com_by_X_Sky_API2.lua ( 1.64 килобайт ) : 24

Автор: Wariner 13.11.2009, 11:24

считаю совершенно не нужным 3 скрипта...
давай по порядку:
1)переменные лучше объявлять локальными, поэтому не так

Код
Bot = "[BOT]Revolution"
cmdTop = "топик"
tProfiles = {    --Кто может использовать команды (1 - да / 0 - нет):
        [-1] = 0,    -- Анрег
        [0] = 1,    -- Админ
        [1] = 1,    -- ОП
        [2] = 0,    -- VIP
        [3] = 0,    -- Рег
}

а вот так
Код
local Bot = "[BOT]Revolution"
local cmdTop = "топик"
local tProfiles = {    --Кто может использовать команды (1 - да / 0 - нет):
        [-1] = 0,    -- Анрег
        [0] = 1,    -- Админ
        [1] = 1,    -- ОП
        [2] = 0,    -- VIP
        [3] = 0,    -- Рег
}


2) как советовал Setuper лучше использовать венгерскую нотацию для обозначения переменных или хотябы один вид а то у тебя user и User - это совсем разные переменные! Так как это таблица лучше писать tUser
3) вот это
Код
        local _,_,cmd = string.find(Data, "%b<>%s%p(%S+)|")

лучше так
Код
        local cmd = Data:match"%b<>%s%p(%S+)|"

а это
Код
        if cmd and (cmd == cmdTop) then

просто
Код
        if cmd == cmdTop then

4) вот эту часть
Код
            hubtop = SetMan.GetString(10)
                Core.SendToAll(Data)
                Core.SendToAll("<"..Bot.."> Топик хаба: "..hubtop.."")
                return true
            end

вот так
Код
            Core.SendToAll(Data)
                Core.SendToAll("<"..Bot.."> Топик хаба: "..SetMan.GetString(10).."")
                return true
            end


PS: не надо в название скрипта писать свой ник
PPS: вот набросал как примерно должно получится


 ShowTopic.lua ( 1.3 килобайт ) : 18
 

Автор: X-Sky 13.11.2009, 11:44

Цитата
Core.SendToAll("<"..Bot.."> Топик хаба: "..SetMan.GetString(10).."")

Получается так:
Код
Топик хаба: тест
X-Sky меняет топик на: 1
ПЕРЕЗАХОЖУ НА ХАБ
Топик хаба: тест

И ещё..)
Код
[15:44] Синтаксис ...X-Sky\0.4.1.1new\scripts\ShowTopic.lua:39: bad argument #1 to 'SendToAll' (string expected, got nil)


P.S. Сильно не ругайся, только учусь писать :(
P.P.S. В смысле скрипты big_smile.gif

Автор: Setuper 13.11.2009, 13:05

Условие

Код
if cmd and (cmd == cmdTop) then
было написано правильно. Оно предостерегает от попытки сравнить cmdTop с nil, так как пользователь может отправить, например, пустую строку в чат, и тогда регулярное выражение ничего не захватит.

Что касается установки топика, то нужно писать SetMan.GetString(10, "новый топик").

Код:
Код
Core.SendToAll(Data)
Core.SendToAll("<"..Bot.."> Топик хаба: "..SetMan.GetString(10).."")

лучше писать в одну функцию:
Код
Core.SendToAll(Data.."|<"..Bot.."> Топик хаба: "..SetMan.GetString(10))


И конечно же нужно избавляться от очень дурной привычки добавлять конкатенацию с пустой строкой! Не знаю от кого она пошла, но она очень вредная.

Автор: X-Sky 13.11.2009, 15:43

Цитата
Условие было написано правильно.

И то радует ^.^
Цитата
Не знаю от кого она пошла (конкатенация)

Мне так с каким-то скриптом советовал Nickolya

В остальном спасибо, Setuper

Автор: Wariner 21.11.2009, 19:37

Ммм исправления будут?)))))

Автор: X-Sky 22.11.2009, 6:58

Да, конечно.
Заметался немного, про скрипт забыл tire.gif
Как смогу - выложу, обещаю, занят в последнее время очень