В общем не успел я доделать всё что хотел, время кончилось. поэтому вот тут выкладываю модуль и скрипт для банов. протестировано на версии 2,0,3
Пока нет разделения на профили...
Сам модуль Ban.lua кладём в папку libs
Скрипт BanManager.lua с папкой BanManager в папку scripts
PS: Илюх жду твоих коментов))
PPS: От остальных жду доработок)))))
Спасибо. Но есть 1 недочёт, который я пока что заметил))) Забанить какого-либо пользователя может любой, кто присутствует на хабе =)))
По логике всё верно, но есть пару моментов.
1) Не думаю, что стоит смешивать модули и плагины в одну кучу. Для модулей есть папка libs. Плагины - это динамические библиотеки, которые подключает хаб.
2) Обычно работа с модулями несколько иная и предполагает некий защитный механизм кода (lua функция module), то есть существование модуля, как таблицы в глобальном окружении.
А так в принципе все хорошо на мой взгляд написано. Спасибо.
ban.lua:
поправил с виденьем Илюхи (надеюсь правильно) + произошли некие изменения:
в модуле остались только 2 функции бан и анбан (обе ещё будут дорабатываться!)
проверку на забаненость и очистка банов по времени перенесены в сам скрипт!
PS: профилей опять же пока нет!
UPD: добавил в скрипт функцию просмотра забаненых!!!
Не работает. Прикрепил скрин. Время выставлял 1m. RusHub 2.0.3 LUA 1.3
поправил. скрипт перезалил!
С введением переноса таблиц между скриптами, хотелось бы убрать все нагромождения и запихнуть всё в модуль, кроме таблицы банов, которая будет вызываться модулем. То есть, сделать так как и было задумано с самого начала. Есть модуль, и мы, подключая его к любому скрипту, получаем в этом скрипте доступ к функциям бана и только, а таблица банов нас не волнует.
Не совсем понял данный коммент....
Сейчас как раз все функции бана (бан и анбан) находятся в модуле, а всё остальное убрано в скрипт который этим управляет. или я опять что то не вкуриЛ?
Сейчас я доработаю и выложу.
По ходу доработки устранил пару багов и немного оптимизировал.
ок жду))))
Название скрипта: модуль банов + менеджер банов
Скрипт для: RusHub
Автор: Wariner (немного доработал: Setuper)
Описание: Модуль банов позволяет использовать функции бана в скриптах. Менеджер банов позволяет забанить, используя команды.
Модуль банов не может работать отдельно от менеджера банов, так как менеждер банов содержит основную таблицу с банами.
Внимание. Этот скрипт будет работает только с lua плагином, который равен или выше, чем версия v1.4, так как в плагине был устранён баг в функции Core.SetGVal.
Теперь расскажу чего я добился. Теперь, подключая модуль Ban в любом скрипте можно будет забанить того или иного пользователя и при этом не нужно будет читать из файла базу забаненных или использовать таблицу с забаненными, - всё это скрыто в модуле Ban. Очень удобно банить с помощью модуля.
Ban.lua ( 2.63 килобайт )
: 389
BanManager.rar ( 2.07 килобайт )
: 298
а какая принципиальная разница между работой моей версии и твоей?(на пальцах)
и почему в темпбане показывает кто забанил а в перманенте нет?
У тебя в функцию BanUser первым аргументом передавалась таблица, что не удобно в использовании в различных скриптах.
В постоянном бане я забыл указать. Перезалил.
ну с одной стороны да, а с другой ты привязал работу модуля к скрипту. а у меня в любой скрипт можно было сделать dofile и прописать функцию с таблицей. или типо так не оптимально?
В принципе нет особой разницы в быстроте выполнения, так как баны не часто вызываются, хотя мой вариант будет работать быстрее.
понятно)))))
ждём функцию дисконекта по ип наверно))))
при запуске скрипта "BanManager.lua " произошла ошибка: bad argument #1 to 'StartScript' (script was started already or script was contained mistakes)
хм странно у меня всё работает! думаю стоит указать версию хаба плагина и какой именно банманеджер ты качал!
Нужно создать отдельную тему с модулями чтобы не прикладывать к каждому скрипту тот или иной модуль.
Потом, во-первых, в твоём модуле texts нет объявления модуля, то есть фактически это не модуль, а обычный файл.
Во-вторых, в твоей версии скрипта предполагается только бан по нику, и используется только функция разъединения пользователя по нику, что не правильно, так как модуль банов также предполагает бан по ip.
В-третьих, дисконнект и сообщение всем о бане лучше убрать в модуль, для того, чтобы можно было использовать модуль банов в других скриптах и не заботиться о дисконнекте и сообщении.
В-червёртых, я думаю нужно привязывать возможности к профилям, а не к наличию ключика.
В общем сейчас я этим займусь, и сделаю как надо))
хехе ты читаешь всю базу зарегистрированных пользователей, для того чтобы сделать доступ только определённым.
А нужно чтобы скрипты работали отдельно, то есть не привязывать скрипт банов к скрипту регистрации.
Скрипт регистрации устанавливает пользователям профиль, и этот профиль можно использовать в любом скрипте. Это делается с помощью занесения в таблицу пользователя поля профиля:
у меня такая ошибка - в чате при перезапуске пишет:
произошла ошибка: bad argument #1 to 'StartScript' (script was started already or script was contained mistakes)
а в luaerr:
rushub_v_2.0.5/scripts/BanManager.lua:3: attempt to call field 'GetScriptsDir' (a nil value)
что нужно исправить?
Заменить Core.GetScriptsDir() на Core.sScriptsDir
Это оптимизация последней версии плагина
Setuper спасибо за помощь, отличная разработка, ждем новостей и обновлений, удачи!!!
при бане вылетает рус хаб.
сидел-сидел, искал-искал, но так и не нашел, где доступ к банам изменить. Хочу чтоб только Profile 0 имел доступ.
А то вообще все имеют доступ ;)
добавил позже:
Ну не нашел, так сам сделал, но только отправку менюшки, команды доступны по-прежнему всем профилям =(
KamoK, да действительно баг. Сейчас буду исправлять.
Баг появился в функции Core.GetGVal из-за модернизации кода, и был исправлен в плагине v 1.11
Этот модуль банов может запретить вход по ип прописанным в базе?
Парни доделайте пожалуйста скрипт, больно много спаму появилось на хабе ((((
Собственно мой скрипт. Сделал только одно - использование модуля доступно только админам и ОПам))
STRELOK_IS74, в версии 2.1.2
"[02:09:29] <Bot> Вы удачно забанили юзера." и юзер дальше остаётся на хабе и пишет в чат спокойно.
Ему это почему-то не мешает входить обратно. Юзер честно забанен, в списке есть, профиль пользователь, а в программке RusRC прекрасно подключается. Так и должно быть?
В скрипте BanManager.lua третью строку надо исправить так:
В BanManager в команду !ban добавил дисконнект с сообщение о бане
[12:26:52] <Ban> ...Connect/test rushub/scripts/BanManager.lua:90: attempt to index global 'v' (a nil value)
при том, что левый юзер: [12:26:52] <RusHubBot> gro (46.33.224.219) отправил в главный чат неизвестную команду: ban
действительно бредятина какая-то была написана
подправил
[18:50:03] <Ban> ...Connect/test rushub/scripts/BanManager.lua:95: bad argument #2 to 'SendToUser' (string expected, got nil)
В функцию UnbanUser в файле Ban.lua добавил строчку:
надо думать о новом
добавил таблицу профилей. Вроде работает.
Бета версии с исправлениями:
Протестили, всё работает корректно.
Привёл к человеческому виду скрипт.
Все остальные скрипты в теме удалил.
Как это не вылетает?
У меня все вылетают. Даже по несколько человек (если бан по ip).
Все хорошо работает. из 2 поста перенесите в 1й вот это:
Отличный скрипт. Часть функций вынес в модули: files и utils. Кое что подправил под себя. Спасибо вам Setuper, Wariner и всем остальным кто трудился над устранением ошибок.
А где взять луа 1.4?
mod, Луа плагин поставь последний.
Я и спрашиваю, где его взять, чтобы поставить? На форуме не нашел.
http://mydc.ru/topic2378.html
Выше версии 1.33 не вижу
Блин, ну так ставь его!
Точку в версиях нельзя воспринимать как разделитель дробной и целой частей числа.
Для сравнения версий нужно сравнивать первые числа, если они равны, то сравнивать числа после точки. Точка может быть не одна, тогда последующее сравнение продолжится по тому же принципу.
Пример: версия 1.10 больше версии 1.9
Saymon, дак оно и стоит. В первом сообщении говорится что нужно 1,4.
Setuper, 1,4 выше 1,33 - верно?
Теперь понял. Думал 1,4 = 1,40
Помогите пожалуйста !
как сделать в скрипте Бан По Ip и по нику, а не по отдельности ?
CrazyKiller, руками, там где по нику %[nick] , а где по IP'y %[ip]
Что-то банхаммер пускает забаненых. Т.е. в меню есть пункты, при бане по IP выкидывает с хаба. В списке забаненых есть юзер. Но после переподключения он нормально может функционировать. Хотя его IP значится в списке забаненых. В чЁм может быть причина?
Оказывается, что VIP банить нельзя, а остальные банятся. Спасибо за помощь. =)
Периодически вылетает скрипт:
лимиты подними на открытые файлы
Столкнулся со следующей проблемой: Баны не удаляются из таблицы забаненных...
P.S. я что то не нашел функцию для сохранения в скрипте ...
Ребят, помогите
Так и еще интересный факт:
Смотрю список забаненных:
Нужно править модуль банов.
нужно делать плагин банов)))
так вот захотелось мне чтобы в сообщении во время бана показывалась причина и ник кого забанили...+ установить дефолтные значения причины и времени чтобы не писать всякие 1h стандартная_причина ))
в скрипте сделала так:
Столкнулся с проблемой - теряет список забаненых. Почему происходит непонятно. Только было 20 забаненых (свежих), через 2 часа в списке остались 5 (почему-то старые баны остались).
отбой. Вот я сглупил. Настраивал на сайте функцию и дергал туда-сюда системные часы, на месяц вперед-назад. Естественно русхаб думал что время бежит и отпускал забаненых.
Ban.lua:20: attempt to call field 'GetGVal' (a nil value)
RusHub 2.4.0[beta] (я думаю что модуль луа тоже обновлённый стоит, надеюсь mariner при обновление и его обновлял)
Добавлял в скрипт бан Ban.BanUser(user.sNick,tCfg.ban_time.."m", bot, sReason) и при попытке скрипта забанить пользователя вылезла ошибка выше. Проблема в скрипте Ban.lua или я что-то не так добавил в скрипт который должен банить?
Скрипт работает почти хорошо, и в таблицу баны пишет и кикает. Вот только без проблем пускает забаненого пользователя, бан и по нику и по IP.
Версии rushub 2.3.10 win64, lua plugin 2.9 win64, и скрипт банов скачал 27.09.2015