Как использовать оператор if с on *: CONNECT: mirc script - PullRequest
1 голос
/ 08 октября 2019

Я хотел бы присоединиться к трем сетям, аутентифицироваться на nicksrv и отправить сообщение боту / или автоматически присоединиться к нескольким каналам, когда я запускаю свой IRC-клиент. Я использую mIRC 7.55.

То, что должен делать клиент, зависит от того, в какой сети он находится. Так что у меня есть оператор if, но он не работает правильно.

С одним сервером он работает идеально, как только я добавляю более одного, у меня возникают проблемы. Что-то должно быть не так с моим синтаксисом, или, может быть, если бы я мог использовать что-то еще, чем $server?

on *:start: {
  /server irc.gazellegames.net:+7000
  /server -m irc.scratch-network.net:+7000
  /server -m irc.myanonamouse.net:+6697
}
on *:CONNECT: {
  if ($server = "horus.gazellegames.net" || "anubis.gazellegames.net") {
    /msg NickServ IDENTIFY password
    /msg Vertigo ENTER username password
  }
  if ($server = brooklyn.scratch-network.net) {
    /msg NickServ IDENTIFY password
    /msg Drone enter #channel1 username password
  }
  if ($server = "irc.myanonamouse.net" || "irc2.myanonamouse.net") {
    /msg NickServ IDENTIFY password
    /j #channel1,#channel2
  }
}

Ожидаемый результат - присоединение к сетям и выполнение IF STATEMENT и аутентификация с правильными учетными даннымидля каждой сети. Скрипт работает, но он ненадежен.

Сценарий, кажется, отправляет все на первый сервер, к которому он подключается, см. Фрагмент здесь: https://imgur.com/65bhhNn

И он не может присоединиться ко второму каналу для irc.myanonamouse.net / irc2.myanonamouse.net.

Я бы хотел избежать утечки своих учетных данных и автоматизировать их, поэтому мне просто нужно запустить клиент, чтобы присоединиться ко всем сетям, пройти аутентификацию, отправить сообщение боту или присоединиться кнесколько каналов.

Ответы [ 2 ]

0 голосов
/ 29 октября 2019

Я разделил различные типы действий на определенный обработчик псевдонимов и передал ему сетевой идентификатор. то есть: SpecificNetworkCommands , JoinNetworkChannels

Я также удалил проверку подлинности NickServ из процедуры подключения и не только сгенерирует ответ при запуске NickServ, инициирующим ON NOTICE событие. Это поможет вам всегда проходить проверку подлинности в случае перезапуска сетевых служб и запроса повторной проверки подлинности.

Примечание:

  1. Все эти повторяющиеся if $network == можно сделать динамичным и более чистым, дополнительно создав механизм хранения для Authentications или AutoJoins.
  2. Вы также можете использовать команды Authentication \ Identification, AutoJoin, Perform, сценарии mSL, которые будут выполнять каждую часть. это для вас без каких-либо усилий и большую часть времени с пользовательским интерфейсом.

Код: (не был проверен)

ON *:CONNECT: {
  SpecificNetworkCommands $network
  JoinNetworkChannels $network
}

; This will send network credentials whenever required.
ON *:NOTICE:This nickname is registered*:?: {
  if ($nick == NickServ) {
    var %username, %password
    if ($network == NetworkName1) {
      %username = MyNetworkName1Username
      %password = MyNetworkName1Password
    }
    elseif ($network == NetworkName2) {
      %username = MyNetworkName2Username
      %password = MyNetworkName2Password
    }
    elseif ($network == freenode) {
      %username = MyFreeNodeUsername
      %password = MyFreeNodePassword
    }

    if (%username && %password) {
      msg nickserv identify %username %password
    }
  }
}

; Contain network specific actions
; $1 means the passed $network parameter
alias SpecificNetworkCommands {
  if ($1 == GGn) {
    msg Vertigo ENTER username password
  }
  elseif ($1 == Scratch-Network) {
    msg Drone enter #channel username password
  }
}

; Joining the specific network channels
; $1 means the passed $network parameter
alias JoinNetworkChannels {
  if ($1 == MYANONAMOUSE) {
    join #channel1
    join #channel2
  }
  elseif ($1 == freenode) {
    join #channel1
    join #channel2
  }
}
0 голосов
/ 08 октября 2019

Я решил эту проблему, введя аутентификацию nickserv на каждом сервере, инструменты -> параметры -> серверы -> выберите сервер и выберите «Изменить» -> метод входа = nickserv (/ msg nickserv) -> введите свой пароль и сохраните.

Я также поменял $server на $network, кажется более надежным.

on *:start: {
  /server irc.gazellegames.net:+7000
  /server -m irc.scratch-network.net:+7000
  /server -m irc.myanonamouse.net:+6697
}
on *:CONNECT: {

  if ($network = MYANONAMOUSE) {
    /j #channel1
    /j #channel2
  }
  if ($network = GGn) {
    /msg Vertigo ENTER username password
  }
  if ($network = Scratch-Network) {
    /msg Drone enter #channel username password
  }
}
...