Ваш вопрос с приведённым примером содержит в себе сразу несколько запросов, при реализации которых изменится структура БД. Так как на данный момент этот скрипт сохраняет в БД строки, которые содержат 3 токена с данными, разделённые символом ";" [mark=red]Nickname;Host;Reason[/mark], а вы предлагаете, чтобы после изменения скрипт сохранял в каждой строке 6 токенов [mark=red][ID:XX12345];Nickname;Ident;Host;#Channel;Reason[/mark]. В этом случае нарушится обратная совместимость со структурой записей в ранее используемом файле БД, потому что скрипт больше не сможет производить правильный поиск, что повлечёт за собой необходимость внести изменения в каждую строку уже существующего файла БД, либо придётся всё удалить и создать новый файл.
Тем не менее, реализация вашего запроса сделает этот скрипт более совершенным и расширит его возможности по поиску и проверке "плохих" пользователей канала.
Поэтому я всё-таки принял решение переписать этот код с целью обновления и улучшения его функциональности. Новая версия скрипта была протестирована на mIRC v7.75.
Итак, вы можете попробовать использовать этот код скрипта:
Код:
;#####################################################################
;# Name: Bad User v1.1
;# Author: Epic (http://epicnet.ru, irc.epicnet.ru:6667 #Code)
;# Description: When you enter a command inside the client where the script is installed, a “Kick+Ban” is performed for the specified user nickname, and his user data is written to the database for further checked and set a re-ban, if he tries joined to the channel again.
;# Command: /bu <nick> [reason]
;#####################################################################
on @*:JOIN:#:{
if ($check_db($nick)) {
var %return $v1, %id_ban $gettok(%return,1,59), %reason $gettok(%return,6,59)
ban $+(-u,$ban_timer) $chan $nick 2 | kick $chan $nick %id_ban %reason
}
}
alias bu {
if ($active !ischan) { echo -a 05This command can only be used in a channel window. | return }
if ($me !isop $chan) { echo -a 05To execute I need to set the channel12 $chan 05operator status @ OP. | return }
if (!$1) { echo -a 05Syntax:12 /bu <nick> [reason] | return }
if ($1 !ison $chan) { echo -a 05There is no nickname12 $1 05on the $chan channel. | return }
var %ident $ial($1).user, %host $+(*!*@,$gettok($ial($1).host,1-3,46),.*), %id_ban $id_rand
if ($2) var %reason $2- | else var %reason $kick_reason
ban $+(-u,$ban_timer) $chan $1 2 | kick $chan $1 %id_ban %reason
if (!$check_db($1)) write -i $file_db $+(%id_ban,;,$1,;,%ident,;,%host,;,$chan,;,%reason)
}
;---------------------------------------------------------------------
alias -l file_db { return scripts\BadUser\badusers_db.txt }
alias -l id_rand { return $+([ID:,$rand(A,Z),$rand(A,Z),$rand(10000,99999),]) }
alias -l ban_timer { return $rand(1800,3600) }
alias -l kick_reason { return 💀 Bye! You are not welcome here. }
;---------------------------------------------------------------------
alias -l check_db {
var %ident $ial($1).user, %host $ial($1).host
var %host1 $+(*!*@,%host), %host2 $+(*!*@,$gettok(%host,1-3,46),.*)
var %host3 $+(*!*@,$gettok(%host,1-2,46),.*), %host4 $+(*!*@,$gettok(%host,1,46),.*)
if ($read($file_db,ntw,$+(*;,$1,;*;*;*;*))) return $v1
if ($read($file_db,ntw,$+(*;*;,%ident,;*;*;*))) return $v1
if ($read($file_db,ntw,$+(*;*;*;,%host1,;*;*))) return $v1
if ($read($file_db,ntw,$+(*;*;*;,%host2,;*;*))) return $v1
if ($read($file_db,ntw,$+(*;*;*;,%host3,;*;*))) return $v1
if ($read($file_db,ntw,$+(*;*;*;,%host4,;*;*))) return $v1
}
Настройка скрипта производится через отдельные алиасы в коде:
Алиас "file_db" возвращает путь к файлу с базой данных пользователей, на которых был установлен Бан.
Алиас "id_rand" возвращает сгенерированную метку-идентификатор в виде "[ID:XX12345]" для идентификации установленного Бана и отображения в Кик сообщении.
Алиас "ban_timer" возвращает случайно сгенерированное числовое значение в секундах для установки времени таймера Бана, по истечении которого запрет будет снят.
Алиас "kick_reason" возвращает текстовое сообщение, которое будет отображаться при выполнении Кика (если вы не указали в команде свой текст).
Файл "badusers_db.txt" с БД теперь должен содержать такую структуру данных, с подобными строками, которые вы также сможете редактировать в ручную:
[flist=black][ID:AW30284];masha;orbita55;*!*@94.109.37.182;#test;💀 Bye! You are not welcome here.
[ID:HE92128];user;testing;*!*@102.85.*;#test;💀 Bye! You are not welcome here.
[ID:FA80151];troll;supertroll;*!*@23.54.39.*;#test;💀 Bye! You are not welcome here.[/flist]
[indent=0.8,0.5]
P.S. Что-то подобное с такой же структурой данных ранее уже запрашивал Robert, и ваш вопрос в некотором роде повторяет его некоторые предыдущие запросы. Только к сожалению я не могу вспомнить, где именно эти вопросы обсуждались и где были опубликованы готовые скрипты. Поэтому попробуйте самостоятельно поискать все его посты на разных форумах или свяжитесь с ним лично, т.к. возможно вы найдёте для себя что-то полезное из созданных и опубликованных для него ранее mIRC скриптов.
Убедительная просьба - Не нужно дублировать старые темы форума, создавая и открывая новую тему (ветку) с вопросом по скрипту, который уже ранее был опубликован и обсуждался в другой теме (ветке) форума, т.к. это может создать путаницу для читателей, которые будут также искать ответы на свои вопросы по той же теме. Поэтому, пожалуйста, оставляйте свои вопросы в той же теме (ветке) форума, где вы нашли скрипт, по которому у вас возникли вопросы и если вы хотите сделать запрос на его изменение/исправление/обновление.
- Подпись автора
[html]<style>img {vertical-align:middle;}.hnet{color:#FFFFFF;}.hstar{color:#DE0000;}.htext{font-family:Verdana;font-size:13px;color:#6E1E00;}.heading{font-family:Verdana;font-size:13px;font-weight:bold;background-color:#4897E7;}.stitle{font-family:Verdana;font-size:12px;}.dot{color:#808000;}.desc{color:#ADADAD;}a .curl{font-family:Verdana;font-size:13px;color:#3A92CD;}</style><table><tr><td width="20px" height="20px"><img src="https://forumstatic.ru/files/000d/c9/8c/34681.jpg"></td><td><a href="https://forum.epicnet.ru/viewtopic.php?id=234"><span class="heading"> <span class="hstar">★</span> <span class="hnet">EpicNet.Ru</span> <span class="hstar">★</span> </span><span class="htext"> - IRC Чат © 2008</span></a></td></tr><tr><td></td><td><div class="stitle"><span class="dot">•</span> <span class="desc">Вход через вебгейт:</span> <a href="http://irc.epicnet.ru"><span class="curl">http://irc.epicnet.ru</span></a><br><span class="dot">•</span> <span class="desc">Сервер:</span> irc.epicnet.ru <span class="desc">Порты:</span> 6667, 6668 (ssl)<br><div></td></tr></table>[/html]