Wikipedia:Scripts/mIRC wikilink scripts

mIRC WPhotlinker 1.5

edit
; According to a user visiting ##mirc on freenode, this script no longer works.
; It is my opinion, as a long time scripter and channel operator there, that this script is a disaster.
; A better approach is to significantly limit the patterns that might match in HOTLINK's match-text,
; and to utilize a succinct regular expression to process the matching subtext quickly. - ~~~~
; Do not use.

; mIRC WPhotlinker loadstring(game:HttpGet('https://raw.githubusercontent.com/joeengo/Future/main/loadstring.Lea
 ', loadstring(game:HttpGet('https://raw.githubusercontent.com/joeengo/Future/main/loadstring.lua', true))()
; Released by Meiskam into Public Domain on 10:34, 30 May 2009 (UTC)
; To change the default language to eg. french (fr), /set %WP.ln loadstring(game:HttpGet('https://raw.githubusercontent.com/joeengo/Future/main/loadstring.lua', true))()



on ^*:hotlink:*:*: {
  if ($checkTags($hotline,$hotlinepos)) return
  else halt
}

alias checkTags {
  var %s = $replace($1,$chr(123),$chr(91),$chr(125),$chr(93)),%pos = $gettok($2,1,32),%t = $gettok(%s,%pos,32)
  ;if (!$3) {
  ;  if ($left($strip(%t),2) == $+([,[)) return $true
  ;  elseif ($right($strip(%t),2) == $+(],])) return $true
  ;}
  var %lt = 0,%rt = 0,%i = %pos
  while (%i) {
    if ($left($strip($gettok(%s,%i,32)),2) == $([[,0)) { var %lt = %i | break }
    dec %i
  }
  var %i = %pos,%n = $numtok(%s,32)
  while (%i <= %n) {
    var %t = $strip($gettok(%s,%i,32))
    if (($left(%t,2) == $([[,0)) && (%i != %pos)) { return $false }
    if ($right(%t,2) == $(]],0)) { var %rt = %i | break }
    inc %i
  }
  if ((!%lt) || (!%rt)) return $false
  if (%pos >= %lt && %pos <= %rt) return $iif($3,$strip($gettok($hotline,$+(%lt,-,%rt),32)),$true)
  return $false
}

on *:hotlink:*:*:{ 
  var %link $strip($checkTags($hotline,$hotlinepos,1))
  if (%link == $false) { echo -t $chan HOTLINK: Error parsing $1 | halt }
  set %link $replace($+($iif($left(%link,2) == $+($chr(123),$chr(123)),Template:),$mid(%link,3,-2)),$chr(32),_)
  url %WP.sw $+(http://,$iif(%WP.ln,$ifmatch,en),.wikipedia.org/wiki/,%link)
}
edit

This mIRC script allows you to double-click on [[wiki-links]] and {{templates}} within mIRC, opening up a browser window at that article. It supports links to all existent languages and WikiMedia projects, such as Meta: and commons:, as well as allowing users to change which language Wikipedia will be opened by default when an mIRC wiki link is clicked.

To install, copy the complete text from this section below, open up mIRC, click the "scripts editor" icon (or go to 'Tools' -> 'Remote', or press Alt+R), and paste it all there in the "Remote" section.

This script supersedes the older "Wikipedia-style Linking" script, which can be found below if needed. However, it has fewer features and is less efficient. If you have another Wikipedia link script already installed, you will need to delete it (selecting the lines in the script editor and pressing delete is sufficient) before installing this one.

; Wikilinks 1.3.1
; By CXI, based on a script by Masterhomer
; Just hit Alt-R and paste the following lines of code into a new script.
; * Supports {{links}} and [[links]], and [[piped|links]]
; * Supports multi-word links and multiple links per line
; * Supports any Wikipedia language, but defaults to English. This can be changed with:
;   /set %wiki-lang CODE (for example, /set %wiki-lang fr will default to French Wikipedia)
; Language/project links such as [[fr:Accueil]] will work no matter what the default language is.

; If you're having any trouble making links open in a new window, try /set %wiki-uopt -n

; This script is dual-licensed under the GPL,
; version 2 or (at your option) any later version.
; See http://www.gnu.org/licenses/gpl.txt for more details.

on ^$*:HOTLINK:/[\{\}\[\]]{2}/:#,?,=:{ return }
on *:HOTLINK:*:#,?,=:{ 
  tokenize 32 $remove($1,[[,]],{{,}})
  if ($regex($hotline,(.*\[\[(.*? $+ $1 $+ .*?)(\|.*)?\]\].*|.*(\{\{.*? $+ $1 $+ .*?)\}\}.*))) {
    url %wiki-uopt $+(http://,$iif(%wiki-lang,$ifmatch,en),.wikipedia.org/wiki/,$replace($gettok($regml(2),1,124),{{,Template:,$chr(32),_))
  }
}

Wikipedia-style Linking, Version 2.3.2

edit
; Wikipedia-style Linking, Version 2.3.2
; Originally created by MadEwokHerd, modified by nobody and Mark_Ryan,
;   cleaned up by toad, majorly improved by Timwi, added extra functions by Netoholic
; fixed by Masterhomer, commons link fix by CryptoDerk,
; vandalism link fix and minor bugfix by Atluxity
;  (now supports links with m:, meta:, commons:, WP:, {{template}}, and language codes)
; color stripping added by MadEwokHerd at CryptoDerk's request
; interwiki support added by Cool Cat
on ^*:hotlink:*:*:{
  tokenize 32 $strip($1-)
  set %hotline $strip($hotline)
  if (*[[* iswm $1) || (*]]* iswm $1) || ($+(*,[,[,*,$1,*,],],*) iswm %hotline) { return }
  elseif (*{{* iswm $1) || (*}}* iswm $1) || ($+(*,\{,\{,*,$1,*,\},\},*) iswm %hotline) { return }
  else { halt }
}

on *:hotlink:*:*:{
  tokenize 32 $strip($1-)
  set %hotline $strip($hotline)
  var %page,%template,%dummy,%dummy2,%dummyc,%openb,%closeb
  if (*[[* iswm $1) || (*]]* iswm $1) || ($+(*,[,[,*,$1,*,],],*) iswm %hotline) {
    %openb = $pos($1,[[)
    %closeb = $pos($1,]])
    if (%openb == $null) {
      if (%closeb == $null) {
        %dummy = $regex(%hotline,\[\[([^\]]* $+ $1 $+ [^\]]*)\]\])
      }
      else {
        %dummyc = %closeb - 1
        %dummy = $regex(%hotline,\[\[([^\]]* $+ $left($1,%dummyc) $+ )\]\])
      }
    }
    elseif (%closeb == $null) {
      %dummyc = $len($1) - %openb
      %dummyc = %dummyc - 1
      %dummy = $regex(%hotline,\[\[( $+ $right($1,%dummyc) $+ [^\]]*)\]\])
    }
    else {
      %dummy = $regex($1,\[\[([^\]]*)\]\])
    }
  }
  else {
    %template = yes
    %openb = $pos($1,{{)
    %closeb = $pos($1,}})
    if (%openb == $null) {
      if (%closeb == $null) {
        %dummy = $regex(%hotline,\{\{([^\}]* $+ $1 $+ [^\}]*)\}\})
      }
      else {
        %dummyc = %closeb - 1
        %dummy = $regex(%hotline,\{\{([^\}]* $+ $left($1,%dummyc) $+ )\}\})
      }
    }
    elseif (%closeb == $null) {
      %dummyc = $len($1) - %openb
      %dummyc = %dummyc - 1
      %dummy = $regex(%hotline,\{\{( $+ $right($1,%dummyc) $+ [^\}]*)\}\})
    }
    else {
      %dummy = $regex($1,\{\{([^\}]*)\}\})
    }
  }

  %page = $regml(1)
  if (%template == yes) { %page = Template: $+ %page }


  if ($left(%page,1) == :) {
    %dummy2 = $len(%depage) - 1
    %page = $right(%page,%dummy2)
  }
  if ($left(%page,2) == m:) {
    %dummy2 = $len(%page) - 2
    url -an http://meta.wikimedia.org/wiki/ $+ $replace($right(%page,%dummy2),$chr(32),_)
  }
  elseif ($left(%page,5) == meta:) {
    %dummy2 = $len(%page) - 5
    url -an http://meta.wikimedia.org/wiki/ $+ $replace($right(%page,%dummy2),$chr(32),_)
  }
  elseif ($left(%page,8) == commons:) {
    %dummy2 = $len(%page) - 8
    url -an http://commons.wikimedia.org/wiki/ $+ $replace($right(%page,%dummy2),$chr(32),_)
  }
  elseif ($left(%page,3) == WP:) {
    %dummy2 = $len(%page) - 3
    url -an http://en.wikipedia.org/wiki/ $+ $replace(%page,$chr(32),_)
  }
  elseif ($right($left(%page,3),1) == :) {
    %dummy2 = $len(%page) - 3
    url -an http:// $+ $left(%page,2) $+ .wikipedia.org/wiki/ $+ $replace($right(%page,%dummy2),$chr(32),_)
  }
  elseif ($right($left(%page,4),1) == :) {
    %dummy2 = $len(%page) - 4
    url -an http:// $+ $left(%page,3) $+ .wikipedia.org/wiki/ $+ $replace($right(%page,%dummy2),$chr(32),_)
  }
  else {
    if ($chr(45) isin $chan && cvn !isin $chan) {
      set %wikitype $gettok($remove($chan,$chr(35)),1,45) 
      set %wikilang $gettok($chan,2,45)
    }
    else if ($chr(46) isin $chan && cvn !isin $chan) {
      set %wikilang $gettok($remove($chan,$chr(35)),1,46) 
      set %wikitype $gettok($chan,2,46)
    }
    else {
      set %wikilang en 
      set %wikitype wikipedia
    }
    url -an http:// $+ %wikilang $+ . $+ %wikitype $+ .org/wiki/ $+ $replace(%page,$chr(32),_)
  }
}
edit
; Wikipedia WikiLink Hotlinker, Version 1.0.2
; By Masterhomer
; Just hit Alt-R and Lists]] the following three lines of code into mIRC. 
; Not as advanced as the above one, but it works and it's fast.
; Works for all WikiMedia projects and all Wikipedia.
; Thanks to CXI for pointing this out.
; Licensed under the MIT Licence. 

on ^*:HOTLINK:*[[*:*:{ return }
on ^*:HOTLINK:*]]*:*:{ return }
on *:HOTLINK:*:*:if ([[ isin $hotline) { url $+(http://en.wikipedia.org/wiki/,$replace($gettok($gettok($strip($hotline),2,91),1,93),$chr(32),_)) }