Не совсем уверен, почему вы хотите, чтобы все было в одной строке, даже если это может быть из-за недостатка знаний по этому вопросу. Для удобства чтения вы можете заменить строку выполнения события скобками:
on 1:JOIN:#: {
timer 1 10 msg $nick Welcome
timer 1 20 If you like the game please vote on the main page
timer 1 30 Thanks for visiting and enjoy your stay
ignore $nick
}
Конечно, в приведенном выше примере все еще есть некоторые проблемы. /msg
не используется, поэтому следующие таймеры ничего не сделают, а /ignore
не предотвратит запуск события. Я расскажу об этом чуть позже.
Кроме того, вы не игнорируете ник, потому что ваша последняя строка (показанная здесь: /timer 1 30 Thanks for visiting and enjoy your stay ignore $nick
) не отделяет ignore $nick
от остальной части строки выполнения, поэтому она просто обрабатывает его как часть предложения. Чтобы сделать это, вам нужно дать ему еще один символ трубы (показанный здесь: /timer 1 10 /msg $nick Welcome | /timer 1 20 If you like the game please vote on the main page | /timer 1 30 Thanks for visiting and enjoy your stay | ignore $nick
, или как выше с моим примером скобки).
Теперь к самому главному вопросу; вызов идентификатора $read
только с именем файла и без дополнительных параметров заставит его прочитать случайную строку из этого файла. Итак, имея это в виду, вы можете сделать следующее:
on 1:JOIN:#: {
timer 1 10 msg $nick $read(welcome.txt)
timer 1 20 msg $nick $read(vote.txt)
timer 1 30 msg $nick $read(closing.txt)
ignore $nick
}
Обратите внимание, что вызовы для чтения любого файла являются локальными для папки данных приложения mIRC. Это означает, что welcome.txt
ожидается в $mircdir
. Если вы хотите загрузить его из другого места, либо укажите абсолютный путь, либо используйте $scriptdir $+ filename.extension
, и убедитесь, что сам скрипт существует в определенном каталоге, например scripts\script_name\script.mrc
.
Чтобы пользователь никогда больше не получал сообщение, вам необходимо отслеживать пользователей. Чтобы сделать это, мы можем просто использовать $read
снова, как при использовании с определенными параметрами, если $read
не найдет то, что мы ищем, он вернет $null
. Игнорирование пользователя не помешает пользователю вызвать событие join .
Параметр
$read
s , предоставленный в качестве второго параметра, ищет строку, начинающуюся с третьего параметра; если эта строка существует, она возвращает строку. В противном случае возвращается $null
.
После этого мы просто /write
в файл. /write
может принимать различные варианты, но ни один из них не имеет значения, так как нам нужно только добавить строку в файл (первый параметр), которая в данном случае равна $nick
(второй параметр).
on 1:JOIN:#: {
if ($read(ignored_nicks.txt, s, $nick) == $null) {
timer 1 10 msg $nick $read(welcome.txt)
timer 1 20 msg $nick $read(vote.txt)
timer 1 30 msg $nick $read(closing.txt)
write ignored_nicks.txt $nick
}
}
Следует отметить, что когда событие использует формат скобок, нам не нужно указывать косую черту (/
) для каждой команды. Только при выполнении команды из поля ввода mirc вам понадобится первая косая черта. Канал (|
) не нуждается в косой черте, хотя я сам добавляю его из хорошей практики, чтобы сделать очевидной его команду (пример: /somecommand blah | /someothercommand blah
).
Наконец, если вы собираетесь добавить больше ответов, это немного изменит мой ответ, но поскольку их всего 3, нет необходимости усложнять их на данный момент.