myDC.ru

Здравствуйте, гость ( Вход | Регистрация )

 
 
Ответить в данную темуНачать новую тему

> ShowTopic, API2 | Показ топика в чате

Теги
Нет тегов для показа
X-Sky
сообщение 12.11.2009, 23:24
Сообщение #1


Освоившийся участник
*****

Группа: Модераторы
Сообщений: 352
Регистрация: 25.7.2009
Пользователь №: 3 960
Спасибо сказали: 73 раза




Название скрипта: 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


Спасибо сказали:
Go to the top of the page
+Quote Post
Wariner
сообщение 13.11.2009, 11:24
Сообщение #2


Самый главный активист :-D
***********

Группа: Модераторы
Сообщений: 2 790
Регистрация: 29.6.2008
Из: г. Тула
Пользователь №: 97
Спасибо сказали: 440 раз




считаю совершенно не нужным 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
 


Спасибо сказали:
Go to the top of the page
+Quote Post
X-Sky
сообщение 13.11.2009, 11:44
Сообщение #3


Освоившийся участник
*****

Группа: Модераторы
Сообщений: 352
Регистрация: 25.7.2009
Пользователь №: 3 960
Спасибо сказали: 73 раза




Цитата
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
Go to the top of the page
+Quote Post
Setuper
сообщение 13.11.2009, 13:05
Сообщение #4


RusHub team lead
**************

Группа: Модераторы
Сообщений: 4 030
Регистрация: 20.6.2008
Из: г. Королёв (Моск. обл.)
Пользователь №: 46
Спасибо сказали: 1708 раз




Условие
Код
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))


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


Спасибо сказали:
Go to the top of the page
+Quote Post
X-Sky
сообщение 13.11.2009, 15:43
Сообщение #5


Освоившийся участник
*****

Группа: Модераторы
Сообщений: 352
Регистрация: 25.7.2009
Пользователь №: 3 960
Спасибо сказали: 73 раза




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

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

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

В остальном спасибо, Setuper
Go to the top of the page
+Quote Post
Wariner
сообщение 21.11.2009, 19:37
Сообщение #6


Самый главный активист :-D
***********

Группа: Модераторы
Сообщений: 2 790
Регистрация: 29.6.2008
Из: г. Тула
Пользователь №: 97
Спасибо сказали: 440 раз




Ммм исправления будут?)))))
Go to the top of the page
+Quote Post
X-Sky
сообщение 22.11.2009, 6:58
Сообщение #7


Освоившийся участник
*****

Группа: Модераторы
Сообщений: 352
Регистрация: 25.7.2009
Пользователь №: 3 960
Спасибо сказали: 73 раза




Да, конечно.
Заметался немного, про скрипт забыл tire.gif
Как смогу - выложу, обещаю, занят в последнее время очень
Go to the top of the page
+Quote Post

Ответить в данную темуНачать новую тему
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 



RSS Сейчас: 29.3.2024, 0:24