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

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

MyDC.ru _ Служебные скрипты [PtokaX] _ Новые скрипты для птохи - новые вариации на старые темы

Автор: baltica 19.5.2013, 20:51

На сайте Synergetic DC++ Community http://mydc.ru/r/?http://synergetic-hub.org вы можете найти дюжину оригинальных скриптов моей редакции, часть написана мной от начала до конца, часть как основа заимствована мной у известных скриптеров, на что всегда имеются ссылки))). Скрипты изначально написаны для личного пользования, но может, и вам пригодятся
http://mydc.ru/r/?http://synergetic-hub.org/scripts

Автор: Saymon21 19.5.2013, 21:16

Обычно приято выкладывать скрипты сюда, на форум. А не куда-то там на какие-то свои сайты... Ну или хотя-бы github, butbucket etc.

Автор: Ksan 19.5.2013, 23:07

baltica, у вас странная манера написания скриптов.. я даже не уверен, все ли они работают и правильно ли..
Если бы вы выложили на этом форуме, то можно было бы поговорить на эту тему, а так...где-то далеко-далеко лежат какие-то скрипты - а нам-то что до них? тут своих хватает...вот когда они станут частью нашего форума, вот тогда и можно принять всерьёз.
Так, навскидку, - нет проверки (или проверок) прав на команду, сомнительные регулярки... пример:

Код
local nick = sData:match("!gag%s-(%S-)|")

Я скрипты на рабочесть не проверял, изучил через Нотепад++ только один (newgag.lua), вот на основании этого и. big_smile.gif
Кстати, этот скрипт я бы написал так:
Обозначения переменных оставил как есть. Сообщения о разглушке (юзеру и в общий чат) счёл ненужными.
Код
local bot = "Hub-Security"
gg = {}

local tProfiles = {
    [0] = 1,
    [1] = 1,
    [2] = 0,
    [3] = 0,
    [-1] = 0,
}

function ChatArrival(tUser, sData)
    if tProfiles[tUser.iProfile] == 1 and sData:find("!gag") then
        local nick = sData:match"^%b<>%s+%S+%s+(%S+)|"
        if not gg[nick] then
            gg[nick] = true
        else
            Core.SendToNick(tUser.sNick, "<"..bot.."> Этот юзер уже заглушен.")
        end
        return true
    elseif tProfiles[tUser.iProfile] == 1 and sData:find("!ungag") then
        local nick = sData:match"^%b<>%s+%S+%s+(%S+)|"
        if not gg[nick] then
            Core.SendToNick(tUser.sNick, "<"..bot.."> Этот юзер и так не заглушен.")
        else
            gg[nick] = nil
        end
        return true
    elseif tProfiles[tUser.iProfile] == 0 and gg[tUser.sNick] then
        return true
    end
end
А вообще, гагать юзеров через эту штатную команду (!gag/!ungag) - позапрошлый век! Писать скрипт под такую команду сейчас - только разве что для тренировки..

Автор: baltica 20.5.2013, 18:56

Цитата(Ksan @ 20.5.2013, 2:07) *

Ksan, спасибо за критику и детальный разбор)) Да, манера написания наверно действительно странная - но я не профессионал в программировании, образование у меня совсем другое - я генетик. Но написание прог всегда было слабостью, сначала - много лет назад писал на С, потом С++, php и lua. Скрипты все работают, и без сбоев - проверено все на нескольких хабах уже. А скрипты здесь долгое время не выкладывал потому, что не хотел лезть к профессионалам со своими пятью копейками))

Автор: Ksan 21.5.2013, 5:26

baltica, и да, кстати, в варианте скрипта newgag.lua, который я показал выше (думаю, и в оригинале так же), командой заглушки/разглушки может служить любое другое !слово, а не только !gag или !ungag, так как по коду достаточным условием заглушки является наличие ника в таблице заглушки.
Поэтому лучше так и сделать, а в дальнейшем попытаться нарастить мощность скрипта дополнительными фишками-удобствами...в частности, добавить меню, сохранение таблицы в файл, возможность добавить срок заглушки, причину заглушки и т.д. и т.п.. То есть, на базе этого скрипта учиться кодировать на Луа..
Все эти фишки уже давно реализованы в полной мере в других скриптах форума (и вы вполне можете ими пользоваться), но вам, раз желаете самостоятельно научиться писать, советую прислушаться и продолжить наращивать этот скрипт. big_smile.gif Вся мощь данного форума к вашим услугам, берите скрипты, изучайте..
Удачи!