Difference between revisions of "$chan (window)"

From Scriptwiki
Jump to: navigation, search
m (htmltable -> wikitable)
(Added note about using $chan(n) to find channels you're in.)
Line 31: Line 31:
 
| ibl    || $true if mIRC knows the banlist for this channel, $inmode if it's currently updating its banlist, $false if it doesn't
 
| ibl    || $true if mIRC knows the banlist for this channel, $inmode if it's currently updating its banlist, $false if it doesn't
 
|-
 
|-
| status  || your status on that channel (e.g. ''joined'' or ''kicked'')
+
| status  || your status on that channel (e.g. ''joined'', 'joining' or ''kicked'')
 
|-
 
|-
 
| inwho  || $true when mIRC is currently processing a /who request for that channel
 
| inwho  || $true when mIRC is currently processing a /who request for that channel
Line 44: Line 44:
 
  $chan(#help.script)  ;returns ''#help.script'' if you're on that channel, ''$null'' otherwise
 
  $chan(#help.script)  ;returns ''#help.script'' if you're on that channel, ''$null'' otherwise
 
  $chan(#help.script).topic  ;returns the topic, which is currently set for #help.script
 
  $chan(#help.script).topic  ;returns the topic, which is currently set for #help.script
 +
 +
== Note ==
 +
When using $chan(N) to loop through all channels, it is usually advisable to use [[$comchan#Example|$comchan]]([[$me]],n) instead.
 +
 +
The reason for this is if you get disconnected and have the setting 'Keep channels open' enabled, the channel still remains in $chan(n) list,
 +
when you reconnect to the server, for a short while before you've actually joined $chan(n).status would be set to 'Joining'.
 +
 +
If for some reason you can't connect, ie: you're banned, user limit reached, invite only, $chan(n).status would now be set to kicked.
 +
 +
For this reason, $chan(n) shouldn't be used to find what channels you're on unless you do extra checks. Example:
 +
;clear %chans varible and set %i to total amount of channel windows open for this connection.
 +
[[var]] %chans, %i = $chan(0)
 +
;keep looping while we have aleast one more channel to check.
 +
[[while]] (%i) {
 +
  ;If we have joined that channel, add it to the list of chans.
 +
  [[if]] ($chan(%i).status == joined) var %chans = [[$addtok]](%chans,$chan(%i),32)
 +
  ;decrease the value of %i
 +
  [[dec]] %i
 +
}
 +
;return all the channels we've found we are in.
 +
return %chans
 +
 +
== Also See ==
 +
* [[$comchan]] Find common channels between you and another user. (And yourself)
  
 
[[Category:Window Identifiers]]
 
[[Category:Window Identifiers]]

Revision as of 01:30, 5 November 2006

Using the $chan identifier you can get information about the channel(s) you're using.

$chan(N/#chan)

You can use a channel or a number for the first parameter. When you specify a channel, mIRC will return information about that particular channel, otherwise it returns information about the Nth channel. $chan returns the number of channels if N is 0 (zero).

When used without any parameters, $chan returns the channel where the current event (e.g. an on TEXT or on JOIN event) occured.

Note that if you get kicked from a channel and have the option 'leave channels open' enabled in the mIRC option dialog, $chan() will still contain that channel. If you want to get info about channels, you are really in, you'd have to use $comchan($me,0).

The following properties are available for $chan:

Property Description
topic the channel topic
mode the channel modes
key the channel key (if channel mode +k is set)
limit the channel limit (if channel mode +l is set)
ial $true when mIRC knows the addresses of all users on that channel, $inwho if mIRC is updating its address list, $false otherwise
logfile the logfile's path and filename for the channel
stamp $true when timestamps are enabled, $false if not
ibl $true if mIRC knows the banlist for this channel, $inmode if it's currently updating its banlist, $false if it doesn't
status your status on that channel (e.g. joined, 'joining' or kicked)
inwho $true when mIRC is currently processing a /who request for that channel
wid the window ID for this channel
hwnd the window handle for this channel, can be used in DLLs

Examples

$chan(#help.script)  ;returns #help.script if you're on that channel, $null otherwise
$chan(#help.script).topic  ;returns the topic, which is currently set for #help.script

Note

When using $chan(N) to loop through all channels, it is usually advisable to use $comchan($me,n) instead.

The reason for this is if you get disconnected and have the setting 'Keep channels open' enabled, the channel still remains in $chan(n) list, when you reconnect to the server, for a short while before you've actually joined $chan(n).status would be set to 'Joining'.

If for some reason you can't connect, ie: you're banned, user limit reached, invite only, $chan(n).status would now be set to kicked.

For this reason, $chan(n) shouldn't be used to find what channels you're on unless you do extra checks. Example:

;clear %chans varible and set %i to total amount of channel windows open for this connection.
var %chans, %i = $chan(0)
;keep looping while we have aleast one more channel to check.
while (%i) {
  ;If we have joined that channel, add it to the list of chans.
  if ($chan(%i).status == joined) var %chans = $addtok(%chans,$chan(%i),32)
  ;decrease the value of %i
  dec %i
}
;return all the channels we've found we are in.
return %chans

Also See

  • $comchan Find common channels between you and another user. (And yourself)