Как отправить случайную строку текста пользователю с последующим постоянным игнорированием в mIRC - PullRequest
0 голосов
/ 16 мая 2019

Ниже приведен пример моего сценария mirc, который запускается на канале JOIN ...

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

Я хочу рандомизировать ответы из текстового файла, хранящегося локально, как именно это сделать? Я новичок в mIRC, только учусь и тестирую на $rand, но с треском провалился.

Я бы хотел сказать 10 вариантов КАЖДОГО последовательного ответа. Итак, первое сообщение для пользователя имеет 10 вариантов, второе - и так далее. В целях эффективности я бы хотел навсегда игнорировать пользователя после того, как он получил все сообщения. Поэтому, когда они в следующий раз зайдут в сеть и присоединятся к каналу, они больше не будут получать сообщения. Я думаю, может быть, для сохранения идентификатора пользователя потребуется .ini?

1 Ответ

0 голосов
/ 16 мая 2019

Не совсем уверен, почему вы хотите, чтобы все было в одной строке, даже если это может быть из-за недостатка знаний по этому вопросу. Для удобства чтения вы можете заменить строку выполнения события скобками:

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, нет необходимости усложнять их на данный момент.

...