myDC.ru

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

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

> Параметр Stime

Теги
Нет тегов для показа
Accelerator
сообщение 18.3.2009, 7:51
Сообщение #1


Developer
******

Группа: Модераторы
Сообщений: 541
Регистрация: 11.11.2008
Пользователь №: 1 075
Спасибо сказали: 244 раза




Есть вопрос... Недавно я писал скрипт про бан ботом хаба(спасибо Setuper за помощь в доработке). При временном бане заметил, что время бана задаётся только в минутах. Я этого не знал, и поэтому писал стандартно время бана(например: 1h), но вместо времени 1h бан ставился на 1 мин. Попытался сделать таблицу времени:
Код
sTime = {
m=1,
h=60,
d=1440,
w=10080,
}

Т.е. чтобы например при вводе 1h , бан сразу автоматически ставился на 60 мин(по таблице). К сожелению таблица времени не работает, помогите доработать...

Вот отрывок временного бана ботом из скрипта:
Код
    if cmd == "!bottempban" then
    if tProfile[tUser.iProfile] == 1 then
            local _,_,sNick = string.find(sData, "%b<>%s+%S+%s+(%S+)")
            local _,_,sTime = string.find(sData, "%b<>%s+%S+%s+%S+%s+(%S+)")
            local _,_,sReason = string.find(sData, "%b<>%s+%S+%s+%S+%s+%S+%s+(.*)")
            if not sNick then
                Core.SendToUser(tUser,"<"..sBot.."> Вы не ввели ник!")
                return true
            end
            if not sTime then
                Core.SendToUser(tUser,"<"..sBot.."> Вы не ввели время бана!")
                return true
            end
            sUser = Core.GetOnlineUsers()    
            for i,v in pairs(sUser) do
                if sNick == v.sNick then
                    sIP = v.sIP
                end
            end
            if not sIP then
                sIP = "не известен"
            end    
            if not sReason then
                sReason = "не указанна"
            end    
            Core.SendToNick(sNick,"<"..sBot.."> Вы были временно забанены на следующие "..sTime.." потому, что: "..sReason)
            Core.SendToAll("<"..sBot.."> забанил "..sNick.." (IP: "..sIP..") следующие "..sTime.." потому, что: "..sReason)
            BanMan.TempBanNick(sNick,tonumber(sTime) or 1,sReason,sBot)
    end    
return true
end
Go to the top of the page
+Quote Post
Wariner
сообщение 18.3.2009, 8:16
Сообщение #2


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

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




Таблица была не правильно написана - это раз!
Код
tTime = {
["m"]=1,
["h"]=60,
["d"]=1440,
["w"]=10080,
}


как ты хочешь чтоб работала таблица если ты просто кинул её в файл - это два!

Код
if not sTime then
     Core.SendToUser(tUser,"<"..sBot.."> Вы не ввели время бана!")
else
      local _,_,iTime, sArg = string.find(sTime, "(%d+)(%a)")
      if iTime and sArg then    -- Здесь можно прикрутить ещё несколько проверок на то есть ли аргумент в таблице tTime и т.д.
           sTime = tonumber(iTime)*tTime[sArg]
      else
            Core.SendToUser(tUser,"<"..sBot.."> Вы неправильно ввели время бана!")
      end
end
sUser = Core.GetOnlineUsers()
Go to the top of the page
+Quote Post
Accelerator
сообщение 18.3.2009, 9:17
Сообщение #3


Developer
******

Группа: Модераторы
Сообщений: 541
Регистрация: 11.11.2008
Пользователь №: 1 075
Спасибо сказали: 244 раза




Спасибо big_smile.gif

А как сделать так, чтобы писало не 60m:
Цитата
[10:44:40] <Security> забанил test (IP: 10.2.136.203) следующие 60m потому, что: test

А 1h. Вот так:
Цитата
[10:44:40] <Security> забанил test (IP: 10.2.136.203) следующие 1h потому, что: test


???

и есть ещё проблема....

После бана ботом хаба, бот банит ник и айпи юзера, после того, как PtokaX стоит перезапустить, бан становится по нику, а не по айпи, как такой недочёт исправить?

я подозреваю это:
Код
BanMan.TempBanNick
BanMan.BanNick


исправляю на:
Код
BanMan.TempBan
BanMan.Ban

бан не работает, команда выводится в чат, сообщения о бане выводятся...
Go to the top of the page
+Quote Post
Wariner
сообщение 18.3.2009, 17:22
Сообщение #4


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

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




если ты исправил скрипт из посты выше в чат должно выводится число без букв а потом всё приводится в нормальный вид функцией
Код
function GetNormalTime(s)
    s=tonumber(s)*60 or 0
    local r=""
    if s>=31104000 then r=math.floor(s/31104000).." г. " s=math.fmod(s,31104000) end
    if s>=2592000 then r=r..math.floor(s/2592000).." мес. " s=math.fmod(s,2592000) end
    if s>=86400 then r=r..math.floor(s/86400).." д. " s=math.fmod(s,86400) end
    if s>=3600 then r=r..math.floor(s/3600).." ч. " s=math.fmod(s,3600) end
    if s>=60 then r=r..math.floor(s/60).." мин. " s=math.fmod(s,60) end
    return r
end


если хочешь чтоб банилось и по нику и по ип тебе надо писать совершенно другую функцию которая будет смотреть по вводимым данным есть ли юзер на хабе, если есть брать его ник ип и банить. Естественно работать при отсутствии юзера она не будет
Go to the top of the page
+Quote Post
Accelerator
сообщение 18.3.2009, 18:07
Сообщение #5


Developer
******

Группа: Модераторы
Сообщений: 541
Регистрация: 11.11.2008
Пользователь №: 1 075
Спасибо сказали: 244 раза




знал бы я ещё как эту функцию написать :(
Go to the top of the page
+Quote Post
Wariner
сообщение 18.3.2009, 18:16
Сообщение #6


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

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




посмотри как работают функции в любых языках!

а если по быстрому то кидаешь функцию в конец скрипта и изменяешь
Код
            Core.SendToNick(sNick,"<"..sBot.."> Вы были временно забанены на следующие "..GetNormalTime(sTime).." потому, что: "..sReason)
            Core.SendToAll("<"..sBot.."> забанил "..sNick.." (IP: "..sIP..") следующие "..GetNormalTime(sTime).." потому, что: "..sReason)
Go to the top of the page
+Quote Post
Setuper
сообщение 18.3.2009, 18:47
Сообщение #7


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

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




хехе не будет работать эта функция, так как в аргумент этой функции нужно подставлять число, а будет подставляться строка, которую даже нельзя преобразовать функцией tonumber в число!
Go to the top of the page
+Quote Post
Wariner
сообщение 18.3.2009, 19:15
Сообщение #8


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

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




Илюх, ну ведь
Код
sTime = tonumber(iTime)*tTime[sArg]

почему же не будет?
Go to the top of the page
+Quote Post
Accelerator
сообщение 18.3.2009, 19:21
Сообщение #9


Developer
******

Группа: Модераторы
Сообщений: 541
Регистрация: 11.11.2008
Пользователь №: 1 075
Спасибо сказали: 244 раза




У меня всё заработало
Go to the top of the page
+Quote Post
Setuper
сообщение 18.3.2009, 19:40
Сообщение #10


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

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




я просто не заметил))
Go to the top of the page
+Quote Post

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

 



RSS Сейчас: 2.5.2024, 3:18