lice5/0000755000175000017500000000000012715251177010233 5ustar timtimlice5/gone.reasons0000644000175000017500000000134312715251177012560 0ustar timtimwe'll be back after a few words from our sponsor. idle is to perfection. away is to godliness. idle is to perfection. away is to godliness. idle is to perfection. away is to godliness. bbl, i'm petting my pet boa constrictor. recording messages. leave yours after the tone. *beep* bbl, the dog pissed on the rug ... stop whatever you are doing until i return. i am not here. please, leave a message. brb my leg is on fire ... practicing new lurking techniques. practicing new lurking techniques. at class ... Advanced Idle Management 5060 can't you see that i am away?! 1 2 3 testing. can you see me? i finally managed to get off this damn thing. i finally managed to get off this damn thing. i finally managed to get off this damn thing. lice5/help/0000755000175000017500000000000012715251177011163 5ustar timtimlice5/help/index0000644000175000017500000000124012715251177012212 0ustar timtim All about LiCe commands and internals: 3 11@3..11@ [ user ] General user commands. 3 (\--/) [ oper ] Channel operator commands. 3 (.>__<.) [ party ] Partyline module. 3 ^^^ ^^^ [ binds ] Some special key binds included. Other topics: 3 11@3..11@ [CREDITS] Who made this? 3 (\--/) [COPYING] GNU GENERAL PUBLIC LICENSE 3 (.>__<.) [LICENSE] LiCe Public License 3 ^^^ ^^^ [ChangeLog] Changes from previous versions [Flood] Flood protection details [QuickStart] A guide to using LiCe lice5/help/user/0000755000175000017500000000000012715251177012141 5ustar timtimlice5/help/user/redcc0000644000175000017500000000105312715251177013143 0ustar timtimUsage: REDCC [-q | ] Redirect all incoming DCC GET's to via DCC CHAT. Repetitive assigns of will overwrite the previous setting. No leading '=' is needed for the assignment of . Use the "-q" option to stop redirecting DCC GET's. Note: You and must be on active DCC CHAT for this command to work, and both must be using LiCe 4. ie. /REDCC SrfRoG - Redirects all DCC GET's to SrfRoG via DCC CHAT. /REDCC -q - Stops all redirection of DCC GET's. See also: [WLN] [TLN] [RELM] lice5/help/user/ctog0000644000175000017500000000507212715251177013024 0ustar timtimUsage: CTOG [channel toggle letter(s)]  Control certain channel routines carried out by the program. The code now can act channel-oriented given the status of these toggles. 1 When set, channel flooders are banned with the worse ban possible. "CTOG F" must be enabled also, unless a JOIN flood was triggered. A Write these toggles to database. B Shit actions: AutoDEOP, AutoKICK, AutoIGNORE, AutoBAN. C Channel protection: AutoKICK channel flooders Note: If /SENSORS C is OFF there will be no channel flood protection. D AutoKICK users matching channel bans and shitlist. Makes sure that users that are banned stay out, this includes nethackers. The program will AutoKICK users that match a ban placed. E Activates nickname-note reminders on JOIN. F AutoBAN channel flooders. Adds extra action to channel protection, users are also banned when this option is set to ON. This option, combined with "B" make a great combination for channel anti-flooding. G Bitch mode. When set, LiCe will only allow friends with the +O mode flag get opped. Everyone else will be deopped if given ops, unless the person giving ops if a friend with moode flag +E - are we confused yet? :) H Automatic IP address lookups on JOIN. I AutoJOIN channel on INVITE. Always, if set. J Auto clone bot detection. Will notify if multiple nicks are from a same hostname, at join time. K Disallow channel keys - NON GLOBAL TOGGLE. L Mode lock. This will enforce the channel modes you specify on the channel. M AutoKICK users that place bogus channel keys. Users that place channel keys with escape or control characters (keybombs) are automatically kicked. N NetHack protection: AutoDEOP nethackers. O Don't kick channel operators that flood. When an op (+o) floods the channel, you'll get the warning but the user won't be kicked. P Friend CTCP commands, Protection, AutoOP and AutoGREET. Q Make channel quiet. Ignore CTCPs, JOINs, PARTS, QUITS and NICK changes sent to the channel. S AutoSHIT of flooders. When enabled, it will add users that flood your channels with SHIT mode +F (KICKBAN). Users that attempt to flood You, are added with mode +I (IGNORE). T Topic lock. This will enforce your topic for that channel. V Don't kick channel voices that flood. When a voice (+v) floods the channel, you'll get the warning but the user won't be kicked. Note: If /SENSORS C is off there will be no channel flood protection. See also: [SENSORS] [TOG] lice5/help/user/wii0000644000175000017500000000046512715251177012661 0ustar timtimUsage: WII [nick1 nick2 ... nicks]  Requests the server WHOIS IDLE information for a nick. Note: if the server you are current using, or the server of the nick you are inquiring is lagged, the WHOIS information will be delayed or may not even be given to you. See also: [W] [WI] [WW] lice5/help/user/rex0000644000175000017500000000055112715251177012663 0ustar timtimUsage: REX [arguments]  Redirects the output of a Unix command to a nick or channel. The Unix command must be given; if the Unix command doesnt exists, the Unix Shell error will be displayed (if any). ie. /REX #LiCe uname -a\n shows #LiCe the output of the Unix command "uname". See also: [RE] [epic 5 EXEC] lice5/help/user/rlag0000644000175000017500000000073712715251177013020 0ustar timtimUsage: RLAG [server] Resets your server lag counter. Or if specified, checks the latency (lag) to "server". Q: What is lag, you ask? A: The term "Lag" is loosely used to determine how long your it takes for your data to reach the server or other users. Compared to the theory of some 19th century physicists about 'luminiferous ether', we find that ether and lag are basically the same :) See also: [VERSION] [P] [PING] [EPIC 2] lice5/help/user/mme0000644000175000017500000000033512715251177012643 0ustar timtimUsage: MME [-a]  Sends an action to all the channels of the current server you are, at once. Use -a to send to all channels of all servers you're connected to. See also: [MSAY] [RE] [RELM] lice5/help/user/log0000644000175000017500000000031112715251177012640 0ustar timtimUsage: LOG [ON|OFF] This commands toggles on/off all logging for the current window. If no aguments are given, the contents in your logfile (if any) will be displayed. See also: [MEMO] lice5/help/user/rdcc0000644000175000017500000000075612715251177013007 0ustar timtimUsage: RDCC <-a|-c|-g|-s> [nick] Removes multiple DCCs at once, optionally matching nickname(s). Options: -a - Remove ALL DCCs -c - Remove DCC CHATs -g - Remove DCC GETs -s - Remove DCC SENDs ie. /RDCC -a - Remove all DCCs. /RDCC -a SrfRoG - Remove all DCCs for SrfRoG. /RDCC -a *frog* - Remove all DCCs for nicks matching *frog*. /RDCC -g - Remove all DCC GETs. See also: [ADCC] [REDCC] lice5/help/user/dump0000644000175000017500000000023512715251177013031 0ustar timtimUsage: DUMP  Dumps the output of an ircii command into a file called 'IRCDUMP' on your HOME directory. See also: [PAGER] lice5/help/user/n0000644000175000017500000000027212715251177012322 0ustar timtimUsage: N  Usage: N  Sends a NOTICE to nick(s) or channel(s) See also: [M] [OOPS] [RELN] lice5/help/user/offers0000644000175000017500000000024612715251177013352 0ustar timtimUsage: OFFERS [nick|channel]  Requests CTCP aDCC LIST information for a nick or channel, or current channel if no arguments. See also: [SC] [P] [VER] lice5/help/user/tog0000644000175000017500000000473712715251177012670 0ustar timtimUsage: TOG [toggle letter(s)]  Options that control the overall behavior of the program and enable or disable major function in it. B Shit actions: Auto DEOP, Auto KICK, Auto IGNORE, Auto BAN. This option emables all SHIT actions, by disabling it SHIT users are not treated. (*) C Channel protection: Global toggle for Auto KICK channel flooders. If this is disabled, no channel flood protection will be enabled, regardless of specific /CTOG settings. F Flood protection. Enables all personal flood protection. If disabled, makes you vulnerable to MSG/NOTICE/CTCP etc floods. G aDCC AutoGET all GET requets. H Automatic IP lookups. When enabled, IP addresses will be translated (if possible) to their associated hostnames, this is for WHOIS and the WHOWAS commands. I Auto JOIN on INVITE to channels. If disabled, the program will check channels you are being invite to, and determine their status: Empty = no nicks are inside the channel (server bug) Fake = channel name contrains control characters. Modes = if channel is valid and exists, its modes are provided. J Auto clone bot detection. Will notify if multiple nicks are from a same hostname, at join time. K Enable/disable Auto DCC CLOSE of DCC SENDs that expire. N NetHack protection: Auto DEOP nethackers. Only FRIEND users with OP flag are excempt from this option, which deops users that abuse server-gained operator status (hacked ops). (*) P Friend CTCP commands, Protection, Auto OP and Auto GREET. Enables all FRIEND auto actions: Auto OP, Protection, Defense, CTCP commands. (*) Q QUIET MODE. Outsiders wont know you are using a script. LiCe will be transparent to outsiders, making you look "scriptless". T Automatic Top-level Domain definitions. When enabled, the definition of top-level domains in WHOIS/WHOWAS will be looked. i.e., '.net' = 'Network' U Automatically check for LiCe updates and news. U User Personal Log. Record some special events that are useful to keep track of. This records can be viewed with the /PLAY command. X Anti-Ping Timeout / Never allow session to ping-timeout. For users that leave sessions idle for a long time (using screen) this option makes the program to stay on the server without ping timeouts. Also, it disables AutoAWAY. (*) Changes all channel toggles globally ON/OFF. See also: [SENSORS] [SBAR] [CTOG] [MTOG] [DTOG] [UPDATE] lice5/help/user/gone0000644000175000017500000000125112715251177013013 0ustar timtimUsage: GONE [-a|-q] [message] Marks you AWAY and tells the last channel/nick you had contact your new AWAY status. The message will be your AWAY message. The "-q" is used to cancel channel announcing. e.g. /GONE -q nobody will see my away msg ;) Normally, LiCe (EPIC) will put you on AWAY status on your current server. To set yourself AWAY in all your connected servers at once, use the "-a" flag. e.g. /GONE -a Gone for the weekend, bye bye!! Edit the file "~/lice5/gone.reasons" to customize the default message. Or create a "~/.lice/gone.reasons" file if you don't want to edit LiCe files. See also: [BACK] [PLAY] [ERASE] lice5/help/user/finger0000644000175000017500000000070712715251177013342 0ustar timtimUsage: FINGER [[-h] ][[user]@full.hostname]  Just like the shell FINGER, and like many already in scripts. ie. /FINGER SrfRoG - Launches finger to SrfRoG's user@host (e.g. srfrog@nema.com) /FINGER -h SrfRoG - UNIX fingers SrfRoG's host (e.g. @nema.com) /FINGER @nema.com - same as above. /FINGER srfrog@nema.com - Launches regular UNIX finger command. See also: [NSL] [DUMP] lice5/help/user/chat0000644000175000017500000000006512715251177013004 0ustar timtimUsage: CHAT  Begin DCC CHAT with a nick. lice5/help/user/hold0000644000175000017500000000021612715251177013011 0ustar timtimUsage: HOLD Toggles holding of screen on/off. This allows fast-moving scroll to be readed more easily. See also: [BEEP] [BINDS] lice5/help/user/user0000644000175000017500000000013412715251177013040 0ustar timtim 3 11@3..11@ ( General user commands ) 3 (\--/) / 3 (.>__<.) 3 ^^^ ^^^ lice5/help/user/erase0000644000175000017500000000026712715251177013170 0ustar timtimUsage: ERASE [#] Erases all messages recorded (while AWAY) from memory. If a message number is specified, only that message is erased. See also: [PLAY] [GONE] [BACK] lice5/help/user/sbar0000644000175000017500000000046012715251177013013 0ustar timtim The Status Bar: [x:BCEFGHIKNPQRSWVXZ], located at the lower right corner of your screen, gives you a quick reference to the options you have enabled in LiCe (/TOG). The first number is revelant to the total number of messages recorded while away. See also: [CTOG] [TOG] [SENSORS] lice5/help/user/m0000644000175000017500000000025712715251177012324 0ustar timtimUsage: M  Usage: M  Sends a MSG to nick(s) or channel(s) See also: [N] [OOPS] [RELM] lice5/help/user/si0000644000175000017500000000054512715251177012503 0ustar timtimUsage: SI [-f] [channel]  Display the invites for a channel. If no channel is given, the invites in your current channel are shown. The "-f" flags forces the use of server output instead of the internal cache. Note: this command is only available on networks with +I channel mode support. See also: [SV] [SC] [SB] [SE] lice5/help/user/l0000644000175000017500000000026112715251177012316 0ustar timtimUsage: L [channel | -a]  Makes you PART your current channel, or another channel if specified. If "-a", PART from all your channels. See also: [J] [CHG] [CYCLE] lice5/help/user/umode0000644000175000017500000000166012715251177013200 0ustar timtimUsage: UMODE [<-/+>user modes]  Changes your user modes, valid for the server you are currently using. i = INVISIBLE Users can see the channels you are in if they try to do WHOIS on you (unless they share one or more channels with you) o = OPERATOR Reserved for IRC operators. w = WALLS You will receive any server walls. These walls are broadcasts of special server actions done by IRC operators (eg. SQUIT CONNECT JUPE) s = NOTICES When set, all server notification will be sent to you, these notices currespond to actions done to users by the server or IRC operators (eg. KILL LINK) Note: These are the "standard" user modes available in all ircii servers, additional modes may exist for modified servers. ie. /UMODE +i-ws removes modes "ws" and places you as invisible. /UMODE displays your current user modes. /UMODE -s removes server notices from your modes. See also: [oper] lice5/help/user/invite0000644000175000017500000000123412715251177013362 0ustar timtimUsage: INVITE [channel]  Usage: INVITE  Usage: INVITE  The first form is to INVITE a nick to your current channel or any channel you specify (that you are in). The second form is INVITE all the nicks from a channel to the current channel you are in, you must be inside both channels for this to be successful. ie. /INVITE asmodean #LiCe : invites asmodean to #LiCe. /INVITE #LiCe mikh ashee : invites mikh and ashee to #LiCe. /INVITE SrfRoG : invites SrfRoG to your current channel. /INVITE #LiCe #HTML : invites #HTML users to #LiCe. See also: [N] [M] [oper] lice5/help/user/note0000644000175000017500000000275512715251177013042 0ustar timtimUsage: NOTE -dup  Usage: NOTE -get  Usage: NOTE -get  Usage: NOTE -set  Usage: NOTE -rem  This command handles note reminders for nicknames. The notes will be stored in a file and remain until you remove them. Notes are activated either manually or automatically (See CTOG and MTOG). When automatic, note retrival is activated by WHOIS, WHOWAS and/or JOIN. Options: -get Get a previously saved note. -rem Remove notes for the specified nickname/channel. -set Creates or appends to notes. If the note doesn't exists it's created, else the new note is appended to the old one. -dup Duplicates a note to another. Notes: When setting a note, the previous note(s) are not removed. You must remove these first if you want to keep the list small. Also, you can get and remove multiple notes by specifying additional nicknames. Yes, you can set note for channels, which will be visible to you when you join the channel. ie. Set a new note: /NOTE -set SrfRoG I owe him $20 dollars. View a previous note: /NOTE -get SrfRoG Duplicate this note to 'ashee': /NOTE -dup SrfRoG ashee Discard all notes for 'SrfRoG': /NOTE -rem SrfRoG Discard _all_ stored notes: /NOTE -rem * Set a note for #LiCe: /NOTE -set #lice The LiCe Website @ http://www.mistik.net/lice See also: [MEMO] [CTOG] [MTOG] lice5/help/user/chanst0000644000175000017500000000036412715251177013347 0ustar timtimUsage: CHANST [channel] Gives statistics of the channel specified: Number of channel operators, half operators, non operators, bans, voices and irc operators, also the sets active for the channel. See also: [SV] [SC] [P] lice5/help/user/pager0000644000175000017500000000076212715251177013167 0ustar timtimUsage: PAGER <[path/]filename>  Allows you to view text files in your ircii active window. The rewritten LiCe viewer/pager routine is utilized (ie. /help). Example: /PAGER ~/ircrc.example /PAGER ./ircrc.example /PAGER /usr/local/lib/irc/ircII.servers /PAGER myfile.txt Known limitations: - Only one file at a time can be viewed. - '.' in the path is assumed as current dir. See also: [DUMP] [MEMO] lice5/help/user/alarm0000644000175000017500000000122212715251177013155 0ustar timtimUsage: ALARM [LIST|KILL|POP |PUSH ]  It performs one or many commands when their triggers are matched every X minutes. eg. To execute "/SAY hi" every 5 minutes: /ALARM PUSH 5 hi To execute "/ECHO *wake up*" every minute: /ALARM PUSH 1 /ECHO *wake up* To list all the scheduled alarms: /ALARM LIST This will display all the active alarms with their proper id. To remove the first example alarm: /ALARM POP To kill all alarm events: /ALARM KILL lice5/help/user/shit0000644000175000017500000000542512715251177013041 0ustar timtimUsage: SHIT -a [host] Usage: SHIT -c <[+|-]channel|#*> [[<-|+>modes] [greet msg]] Usage: SHIT -d  Usage: SHIT -h <[+|-]host> Usage: SHIT -l [handle] Options and Operation: -a Creates a new handle in your SHIT database. If the handle matches the nickname of someone in one of your channels, their user@host will be inserted in the handle's host list. Alternately, a host can be specified and this one will be inserted into the handle's host list. NOTE: If no nickname matches the handle, or no additional host is specified, the handle will have no hosts associated. Then, one must use the -h option to insert/remove hosts to this handle. -c Insert/Removes channels for an existing handle. If #* is specified as channel, the settings will match all possible channels. NOTE: A handle without channels will be automatically purged from the database. -d Deletes a handle, and all associated hosts and channels, from the SHIT database. If a pattern is given, all matching handles will be removed. NOTE: a pattern of * will effectively remove all the handles and wipe your list clean. -h Insert/Removes hosts for an existing handle. NOTE: Handles can initially be host-less this is only useful for maintainance purposes. -l Lists all currently active handles. If a handle is specified, it shows detailed listing of the handle's properties. Channel modes (for -c): A IP ADDR: Bans the user's IP address. B BAN ENFORCE: Will keep user permanently banned. C COUNTRY: Bans the country or inet organization. D DEOP: Deop users shitted. E EXACT: Bans user with the exact pattern in shitlist. F FUCK: Bans the user's host with a pattern. H HOST: Bans the user's host. K KICK: Kick users shitted. N NORMAL: Bans with a simple *!*user@*host mask. U USERNAME: Bans only the user's username. Example 1: Group all those lamers that annoy me and kick-ban from #LiCe, ban from #Linux. /SHIT -a Lamers /SHIT -c Lamers +#LiCe +KN go away lamers!! /SHIT -c Lamers +#Linux +N /SHIT -h Lamers +*!*lamer1@*host1.com /SHIT -h Lamers +*!*lamer2@* /SHIT -h Lamers +Vassago!*@*host3.com ... Example 2: Can't seem to get rid of this lamer 'asmodean', let's shit his ass! We assume he's online (he always is), so the script will auto-add his current user@host. asmodean can be one slippery mofo, so we must kick-ban and enforce the ban. We'll ban his exact user@host only. /SHIT -a asmodean /SHIT -c asmodean +#LiCe +KBE where's skuld4 you lamah?@! Example 3: Seems asmodean insists on not releasing a new skuld for LiCe4, off with him then! Let's ban his arse all over !! /SHIT -a asmodean /SHIT -c asmodean +#* +KBF update http://elfz.codehack.com too! lice5/help/user/sb0000644000175000017500000000040312715251177012465 0ustar timtimUsage: SB [-f] [channel]  Display the bans for a channel. If no channel is given, the bans in your current channel are shown. The "-f" flags forces the use of server output instead of the internal cache. See also: [SV] [SC] [SE] [SI] lice5/help/user/define0000644000175000017500000000032412715251177013315 0ustar timtimUsage: DEFINE  Attempts to define using dictd dictionary server using the dict.org hostname. One or more words or phrases can be specified. Examples: /DEFINE test /DEFINE unix guru lice5/help/user/oper0000777000175000017500000000000012715251257014130 2../operustar timtimlice5/help/user/j0000644000175000017500000000077712715251177012330 0ustar timtimUsage: J [key]  Usage: J  Makes you JOIN the specified channel(s). In the first form, the leading '#' can be omitted. If the channel you want to JOIN has a key, this has to be provided in order for you to join. ie. /J LiCe makes you JOIN "#LiCe" /J #singles,#chatzone makes you JOIN "#singles" and "#chatzone" simultaneously. /J #lamers doofus makes you JOIN "#lamers" and assumes the key "doofus" is used. See also: [L] [CHG] [CYCLE] lice5/help/user/dom0000644000175000017500000000036012715251177012642 0ustar timtimUsage: DOM  If a top-level domain or hostname is specified, it is looked up in the top-level table for a definition. Top level domains include: .com, .net, .fr, .org, etc... See also: [DNS] [WI] lice5/help/user/binds0000777000175000017500000000000012715251257014414 2../bindsustar timtimlice5/help/user/mtog0000644000175000017500000000435212715251177013036 0ustar timtimUsage: MTOG [message toggle letter(s)]  Control the behavior of all message logging in the program. 1 Notify of auto-reply triggers in hidden windows. 2 Allow auto-reply (public) to update the TAB reply list. A Record ACTIONs that are revelant to you, when you are AWAY. B Beep when a new MSG arrives. C Record all text comming via DCC CHAT when you are AWAY. E When enabled, any messages logged to your away log are also saved to disk. This means in the event the client crashes or is killed that you still have all messages saved when you load lice again. All messages in the away log are saved as soon as you enable this. The disk log is deleted as soon as you disable this. All messages on disk are obfuscated. H Highlight your auto-reply word(s) in public messages. This is a CPU intensive setting so defaults to off. Note: Doesn't apply to actions L If you recieve the "too many targets" when trying to send a /WALL toggling this to on can help. Note that setting this ON will remove the /SENS M setting (it is forced to 1) M Record all incoming MSGs (not server MSGs) when you are AWAY. N Record all incoming NOTICEs (not server NOTICEs) when you are AWAY. O Activates nickname-note reminders on WHOIS and WHOWAS. P Record all instances of "auto reply" in the away log. Q Toggle quiet away display. If disabled, it will send a message to the last party you had contact with (nick or channel) that you are AWAY. "The auto away message" R When enabled, sends people that MSG you a notice saying how long you've been AWAY. T Event time stamping. When enabled, all important events will display their time of occurrance. You can change the format under /SENSORS U Personal Status Logs. Records some important information while you are AWAY. V Extended view status. Display USERHOST info in all MSG/NOTICE/BANs. Also display additional verbose messages. W Record channel WALLOPs that are revelant to you, when you are AWAY. X Disables AutoAWAY status logging. When enabled, LiCe will not log "Changed to AWAY status" when you go away automatically. See also: [SENSORS] [TOG] [AR] [DTOG] [CTOG] [WTOG] lice5/help/user/chanlog0000644000175000017500000000050012715251177013472 0ustar timtimUsage: CHANLOG -a  Usage: CHANLOG -d  Usage: CHANLOG -l [channel] Options and Operation: -a Starts logging on the specified channel. -d Stops logging on the specified channel. -l Lists the channels being logged & gives log information. Note: /SENS S is used for the log timestamp format. lice5/help/user/notify0000644000175000017500000000044512715251177013377 0ustar timtimUsage: NOTIFY <<+/->nick1 <+/->nick2 ... <+/->nicks>  Add, removes or lists nicks from your notify list. ie. /NOTIFY +SrfRoG +LiCe -Vassago adds SrfRoG and LiCe, removes Vassago. /NOTIFY lists the nicks present and absent. See also: [USERLIST] [SENSORS] lice5/help/user/friend0000644000175000017500000000621012715251177013332 0ustar timtimUsage: FRIEND -a [host] Usage: FRIEND -c <[+|-]channel|#*> [[<-|+>modes] [greet msg]] Usage: FRIEND -d  Usage: FRIEND -h <[+|-]host> Usage: FRIEND -l [handle] Options and Operation: -a Creates a new handle in your FRIEND database. If the handle matches the nickname of someone in one of your channels, their user@host will be inserted in the handle's host list. Alternately, a host can be specified and this one will be inserted into the handle's host list. NOTE: If no nickname matches the handle, or no additional host is specified, the handle will have no hosts associated. Then, one must use the -h option to insert/remove hosts to this handle. -c Insert/Removes channels for an existing handle. If #* is specified as channel, the settings will match all possible channels. NOTE: A handle without channels will be automatically purged from the database. -d Deletes a handle, and all associated hosts and channels, from the FRIEND database. If a pattern is given, all matching handles will be removed. NOTE: a pattern of * will effectively remove all the handles and wipe your list clean. -h Insert/Removes hosts for an existing handle. NOTE: Handles can initially be host-less this is only useful for maintainance purposes. -l Lists all currently active handles. If a handle is specified, it shows detailed listing of the handle's properties. Channel modes (for -c): A AUTOMODE: gives channel op or voice when they join. +A by itself does nothing, the users need +O or +V also. Note: automodes _dont_ requite password, use with caution E EXCEPTION: allows the user to do the following: 1) Deop other protected users 2) Kick/Ban protected users 3) Remove perma-bans 4) Change locked channel modes F FLOOD FREE: the user won't trigger flood protection G GREET: displays a greet everytime the user joins the channel. I INVITE: invites the user to the channel via !INVITE O OP: gives the user channel operator (+o) via !OP P PROTECT: protects user from others who KICK/BAN/DEOP R REVENGE: revenges user from others who KICK/BAN/DEOP U UNBAN: removes bans matching user via !UNBAN V VOICE: gives the user voice status (+v) via !VOICE Example 1: Add all #LiCe ops to an auto-op and protect list, no greeting. /FRIEND -a LiCe_Ops /FRIEND -c LiCe_Ops +#LiCe +AOP /FRIEND -h LiCe_Ops +*!*user1@*host1.com /FRIEND -h LiCe_Ops +*!*user2@*host2.com /FRIEND -h LiCe_Ops +LiCe!*e@*mistik.net ... Example 2: Create a handle for SrfRoG on #LiCe and #Linux. On #LiCe, we want to op (no auto), protect, revenge and greet. On #Linux, auto-voice and protect only. We know SrfRoG is online now, so his current user@host will be auto-added (SrfRoG can add his own hosts via /msg !IDENT later). /FRIEND -a SrfRoG /FRIEND -c SrfRoG +#LiCe +OPRG Hi there frog! /FRIEND -c SrfRoG +#Linux +AVP Example 3: "Hmm... SrfRoG is a really cool guy, spending time on LiCe and giving it away. The least I could do is give him ops in all my channels!" /FRIEND -a SrfRoG *!cag@codehack.com /FRIEND -c SrfRoG +#* +AOPE frogs are cool! :) lice5/help/user/pic0000644000175000017500000000053012715251177012635 0ustar timtimUsage: PIC Usage: PIC [message] Displays an ASCII picture to the target (nick or channel) that you specify. The picture is taken from the ~/.epic/pics directory. The message gets appended at the end of the picture. The command without arguments, displays all the available pictures. See also: [SV] [SB] [THEME] lice5/help/user/back0000644000175000017500000000133412715251177012765 0ustar timtimUsage: BACK [-a] [-q] [message] Marks yourself HERE from a previous AWAY. Use -a to return you on all servers you're connected to. You can't supply a return message with this option. It tells the last channel/nick you were in contact with that you're "back", if not in "QUIET MODE" (MTOG Q). The message is used to describe why you are HERE now :) if no message is provided, the default one is used. The "-q" is used to cancel the announcing even if "QUIET MODE" is not set. Edit the file "~/lice5/back.reasons" to customize the default message. Or if you don't wnat to edit LiCe files, create ~/.lice/back.reasons and put your own messages in there. See also: [GONE] [PLAY] [ERASE] lice5/help/user/wi0000644000175000017500000000060312715251177012502 0ustar timtimUsage: WI [nick1 nick2 ... nicks | nick mask]  Requests the server WHOIS information about nicks. The second form of WI might work with all servers, it asks the server for WHOIS information about nicks matching a certain nick mask. ie. /WI SrfRoG asmodean LiCe requests the server WHOIS information about nicks: SrfRoG, asmodean and LiCe. See also: [W] [WW] [WII] lice5/help/user/imail0000644000175000017500000000034412715251177013160 0ustar timtimUsage: IMAIL [nicks ... | emails ...]  Sends email(s) to the addresses or nicks that you specify, without leaving your current IRC session. It relies heavily on the availability of "sendmail", the BSD email server. lice5/help/user/beep0000644000175000017500000000013312715251177012774 0ustar timtimUsage: BEEP Toggles all beeping ON/OFF. That's nice :) See also: [HOLD] [BINDS] lice5/help/user/sping0000777000175000017500000000000012715251257014050 2rlagustar timtimlice5/help/user/ignore0000644000175000017500000000315512715251177013353 0ustar timtimUsage: IGNORE < nick | n!u@h pattern > [[-|+]Ignore types] [timeout ] [reason " Usage: IGNORE < channel | channel pattern > [[-|+]Ignore types] IGNOREs a nick or users matching the wildcard pattern specified. It can also ignore entire channels, by channel name or pattern. If no 'ignore types' are given, "ALL CRAP -PUBLIC" is used. Ignore types: ALL MSGS PUBLIC WALLS WALLOPS INVITES NOTICES NOTES CTCPS CRAP NONE Examples: /IGNORE *!*@*aol.com - ignores users matching '*!*@*aol.com'. /IGNORE *!*@*aol.com NONE - removes ignore for '*!*@*aol.com'. /IGNORE Vassago MSGS NOTICES - ignores 'NOTICES' and 'MSGS' from Vassago's address. (ie., *!*lamer@*dork.org). /IGNORE Vassago NONE - removes previous ignore for Vassago's address. /IGNORE #exceed CTCPS - ignores all 'CTCPS' for channel #exceed (if you are on the channel). /IGNORE #exceed NONE - removes previous ignore for #exceed. /IGNORE *!*@* - ignores everyone! be careful! /IGNORE tjh MSGS timeout 120 reason "You're a lousy coder" - ignores messages from tjh for 2 minutes with the reason "You're a lousy coder" NOTE: It is assumed that a ignore with a timeout is temporary and therefore it is not saved to the database. See also: [NOIG] [epic 1 IGNORE] lice5/help/user/msay0000644000175000017500000000035112715251177013034 0ustar timtimUsage: MSAY [-a]  Sends public text to all the channels on the server you're currently talking to. Use -a to send to all channels of all servers you're connected to. See also: [MME] [RE] [RELM] lice5/help/user/ver0000644000175000017500000000024412715251177012660 0ustar timtimUsage: VER [nick|channel]  Requests CTCP VERSION information for a nick or channel, or current channel if no arguments. See also: [SC] [P] [OFFERS] lice5/help/user/relm0000644000175000017500000000065012715251177013024 0ustar timtimUsage: RELM [ nick|channel] [-list]  Redirect Last 8 Rec'v MSGs to a given nick or channel, or to current channel if no arguments specified. Use '-list' to display you current stored MSGs. ie. /RELM 3 SrfRoG - Displays your third MSG to 'SrfRoG'. /RELM -list - Shows your current MSG list. /RELM SrfRoG - Displays the last MSG you received to 'SrfRoG'. See also: [WLM] [TLM] [RELN] lice5/help/user/noig0000644000175000017500000000031612715251177013020 0ustar timtimUsage: NOIG  Shows all current ignores and gives you the option to remove user(s) from IGNORE list. It will prompt for which user to remove from IGNORE list. See also: [IGNORE] [USERLIST] lice5/help/user/wtog0000644000175000017500000000077612715251177013056 0ustar timtimUsage: WTOG [window toggle letter(s)]  Control the behavior of all new windows. B Beep even if window is hidden. D Use double status bars. C Dedicated Chat Window. All DCC CHATs are sent to a special when this is set. W Message View Window. Moves all incoming MSG's to a window. For people that join large channels and loose their MSGs in scroll, this option creates another window were all MSGs are sent. See also: [SENSORS] [TOG] [AR] [DTOG] [CTOG] [MTOG] lice5/help/user/dtog0000644000175000017500000000106012715251177013016 0ustar timtimUsage: DTOG [message toggle letter(s)]  Control the behavior of all message logging in the program. C DCC AutoCLOSE all incoming file requests. G DCC AutoGET all files sent to you. S DCC AutoSEND files offered in packs. O Overwrite duplicate files on DCC GETs. If not set, files are incrementally renamed and never copied over. Unless AutoRESUME is enabled. Q DCC QUIET MODE. Supress error notices. R DCC AutoRESUME. Completes interrupted file downloads. See also: [SENSORS] [TOG] [AR] [MTOG] [CTOG] lice5/help/user/sv0000644000175000017500000000040112715251177012507 0ustar timtimUsage: SV [nick|channel]  Displays your current LiCe version to others. You must specify to whom or where to display this. If no arguments are given, then the version information will be shown in your current channel. See also: [SC] [SB] lice5/help/user/re0000644000175000017500000000120712715251177012472 0ustar timtimUsage: RE [arguments]  Redirects the output of your commands to a nick or channel. Even if the command doesnt exists, this output if sent. ie. /RE #LiCe WI shows #LiCe the output of a WHOIS request. /RE #LiCe MSG Vassago Phoenix is lame! shows #LiCe the output of sending a MSG to Vassago. Note: Dont use this command repeatedly. This command is well known for its bugs, it's not very stable, you could end up flooding yourself or your channel if you try to redirect extensively complicated commands or commands that use WAIT states. ie. USERHOST, USER. See also: [REX] [epic 5 REDIRECT] lice5/help/user/tlw0000644000175000017500000000026012715251177012670 0ustar timtimUsage: TLW [channel] Makes a topic of the last channel WALLOP. The channel is optional, defaults to your current channel. See also: [WLN] [TLM] [RELM] [oper] lice5/help/user/version0000644000175000017500000000025212715251177013550 0ustar timtimUsage: VERSION [server] Displays the client, script and server versions. If 'server' is the argument, the version of that server is requested. See also: [SV] lice5/help/user/oops0000644000175000017500000000046612715251177013052 0ustar timtimUsage: OOPS  If you send a MSG to someone for which you didnt intend to send the MSG originally, specify the "correct" nick and /OOPS will apologize and send the message to the correct nick. Edit the file "~/.lice/oops.reasons" to customize the message. See also: [M] [N] [RELM] lice5/help/user/ar0000644000175000017500000000112312715251177012463 0ustar timtimUsage: AR [auto reply word(s) ...]  Set or display the words that will trigger 'auto reply'. Q:What is auto reply? A:a set of 1 or more words that LiCe will match against all public messages. If any of these words are matched, the nick of the person that said it (them) will be high- lighted, and added to your TAB list. Then, you can just press 'TAB' key to reply to that person via MSG. Note: auto reply does not trigger on actions. By default, LiCe will make your current nick the auto-reply word. See also: [TOG] [CTOG] [MTOG] [SENSORS] lice5/help/user/p0000644000175000017500000000050312715251177012321 0ustar timtimUsage: P [nick|channel]  Requests CTCP PING information for a nick or channel, or current channel if no arguments. Note: CTCP PING checks how long it takes for a certain user to receive information from you. More than 45 seconds is considered a very "laggy" connection. See also: [VER] [OFFERS] lice5/help/user/sensors0000644000175000017500000000064312715251177013563 0ustar timtimUsage: SENSORS To change numeric sensors used by different routines. If you're having problems with very slow channel sync and find you are cycling from channels, set /sens c to 0 Note: if bogus sensor values are selected, the program's performance/protection will suffer. If you dont have much IRC knowledge, stick with the default values provided. See also: [CTOG] [MTOG] [TOG] [AR] lice5/help/user/chg0000644000175000017500000000043012715251177012622 0ustar timtimUsage: CHG [channel] Makes you PART your current channel and JOIN the channel specified. If no '#' or '&' is specified in the channel name, '#' is appended. If not channel is given, it will just make you leave your current channel. See also: [J] [L] [CYCLE] lice5/help/user/ansi0000644000175000017500000000012012715251177013007 0ustar timtimUsage: ANSI Toggles all ANSI colors ON/OFF. See also: [BEEP] [BINDS] lice5/help/user/play0000644000175000017500000000151712715251177013035 0ustar timtimUsage: PLAY [option]  Plays any recorded messages when AWAY, if any. Also allows saving of specific messages. This is command is interactive; it takes arguments while executed. # - Goes to the message # specified. A - Read all messages at once. D - Erase all messages and exit. E - Erase current message. S - Save current message to AWAY file. Q - Do nothing and quit. V - View all message headings. W - Save all messages and quit (erases from memory) ? - Brings this help. Pressing key will expand the following message, if any. Also, when there are no messages in memory, you are able to view any messages saved in the AWAY file. The second form of the command allows viewing of a specific message by providing it's id number. See also: [USERLIST] [ERASE] [GONE] [BACK] lice5/help/user/tln0000644000175000017500000000026412715251177012663 0ustar timtimUsage: TLN [channel] Makes a topic of the last NOTICE sent to you. The channel is optional, defaults to your current channel. See also: [WLM] [TLW] [RELM] [oper] lice5/help/user/accept0000644000175000017500000000147412715251177013331 0ustar timtimUsage: ACCEPT -l Usage: ACCEPT -a ....  Usage: ACCEPT -d ....  UMODE +g is a setting that some servers support, that is a form of server side ignore. When UMODE +g is set, you can only recieve messages from NICK's on you accept list. This allows you to manage this list. ACCEPT -l will show you your current accept list ACCEPT -a tjh whitefang - will add tjh and whitefang to the list you'll accept messages from ACCEPT -d tjh whitefang - will remove tjh and whitefrom from the list you'll accept messages from Note: Only some servers support accept. This command will report if your server doesn't support it. Servers that don't support accept may use the SILENCE command instead. See also: [NOIG] [IGNORE] [SILENCE] lice5/help/user/ppl0000644000175000017500000000210712715251177012657 0ustar timtimUsage: PPL [flags [args]] [channel] Simplified version of WHO for channels. Easier options and display. Flags: -c HOP COUNT. Displays users with better or equal connection hop count to your IRC server. -g GONE. Displays users that are AWAY. -h HERE. Displays users that are not AWAY. -i IRCOPS. Displays users that are IRC operators. -l LAMERS. Displays users that are not Ops, half Ops or Voices (-o). -o OPS. Displays users that are channel operators (+o). -a HALFOPS. Displays users that are channel half Ops (+%) -v VOICES. Displays users that are channel voices (+v). -n name Displays users that match the name in their IRCNAME. -p mask Displays users only matching the mask in their address (n!u@h). The default value is "*!*@*". -s mark Displays users only matching the mask in the IRC server they are currently on. The default value is "*.*". Without specifying any flags, a merely beautified /WHO is displayed. Unless specified, the channel defaults to your current channel. See also: [CWHO] [SC] [SB] [FRIEND] [SHIT] lice5/help/user/ww0000644000175000017500000000017712715251177012526 0ustar timtimUsage: WW [nick1 nick2 ... nicks]  Requests the server WHOWAS information for nicknames. See also: [W] [WI] [WII] lice5/help/user/reln0000644000175000017500000000066412715251177013032 0ustar timtimUsage: RELN [ nick|channel] [-list]  Redirect Last 8 Rec'v NOTICEs to a given nick or channel, or to current channel if no arguments specified. Use '-list' to display your current stored NOTICEs. ie. /RELN 7 SrfRoG - Displays your seventh NOTICE to 'SrfRoG'. /RELN -list - Shows your NOTICE list. /RELN SrfRoG - Displays the last received NOTICE to 'SrfRoG'. See also: [WLN] [TLN] [RELM] lice5/help/user/update0000644000175000017500000000063012715251177013345 0ustar timtimUsage: UPDATE Checks for LiCe updates and downloads the new version file if needed. Also, displays any current LiCe News from the LiCe website (http://lice.muppetz.com). NOTE: If you did not install LiCe yourself, it's possible that your system administrator might have disabled this command. In that case, this command will not exist. See also: [NSL] [DUMP] [FINGER] lice5/help/user/sc0000644000175000017500000000037612715251177012477 0ustar timtimUsage: SC [-f] [channel]  Display the nicks inside a channel. If no channel is given, the nicks inside your current channel are shown. The "-f" flags forces the use of server output instead of the internal cache. See also: [SV] [SB] lice5/help/user/adcc0000777000175000017500000000000012715251257014002 2../adccustar timtimlice5/help/user/cwho0000644000175000017500000000121112715251177013017 0ustar timtimUsage: CWHO [[flag] [nick!user@host pattern]]  Fast WHO list of your current channel, using the using the LiCe cache. Flags: -a ALL. Display all users matching n!u@h (default) -o OPS. Displays channel ops for a given n!u@h pattern. -h HALFOPS. Displays channel half-ops for a given n!u@h pattern. -l NONOPS. Displays channel non-ops for a given n!u@h pattern. -v VOICES. Displays channel voices for a given n!u@h pattern. The default n!u@h pattern is "*!*" to match all users. If the users have Userlist/Shitlist status, their modes are displayed accordingly. See also: [PPL] [SC] [SB] [FRIEND] [SHIT] lice5/help/user/t0000644000175000017500000000023312715251177012325 0ustar timtimUsage: T [new topic]  To view or change the topic in your current channel, or any other channel you specify. See also: [ET] [oper] lice5/help/user/memo0000644000175000017500000000060112715251177013016 0ustar timtimUsage: MEMO [memo text]  The first form of the command, will save any text included to a file, which can be retrived using the second form of the command (no arguments specified) The memo file will be saved in the help directory for access with the internal viewer. ie. /MEMO this is a test. Then the memo's can be viewed with /MEMO See also: [DUMP] lice5/help/user/findip0000644000175000017500000000023112715251177013331 0ustar timtimUsage: NSL  Attempts to translate the specified IP address to a hostname and viceversa. See also: [WI] [TOG] [CTOG] lice5/help/user/silence0000644000175000017500000000263012715251177013507 0ustar timtimUsage: SILENCE [+|-] < nick | n!u@h pattern > Note: Only some servers support silence. This command will report if your server doesn't support it. By itself, /SILENCE will show you the list of n!u@h on your SILENCE list. SILENCE means the server won't send you any MESSAGES or NOTICES from that mask. You will still receive public messages. If you specify a nick without a +/- it will display the silence list of the nick specified. You can only see this information if you're on the same server as them. If a + is supplied, that nick will be added to your silence list. If a - is supplied, that nick will be removed from your silence list. If a n!u@h pattern is specified in place of a nick, you will add or remove that pattern from your silence list. Examples: /SILENCE - Prints the list of what's on your silence list. /SILENCE +DonG - Adds DonG to your silence list. /SILENCE -bartgeek - Removes bartgeek from your silence list. /SILENCE +*!*@*aol.com - Adds '*!*@*aol.com' to your silence list. /SILENCE Dave-PZ - Show Dave-PZ's silence list, if he's on the same server as you. See also: [NOIG] [IGNORE] lice5/help/user/trans0000644000175000017500000000170412715251177013215 0ustar timtimUsage: TRANS [[-fFgGiIpPsS][-o][-m ][-n ]]  BROKEN: This is currently broken in LiCe 5+. Sorry. Attempts to translate using altavista's babelfish server. If no language option is selected, English to Spanish is the default. Options: -f English to French -F French to English -g English to German -G German to English -p English to Portuguese -S Spanish to English -s English to Spanish -P Portuguese to English -i English to Italian -I Italian to English -m  Sends translation of text to "target" in a MSG. -n  Sends translation of text to "target" in a NOTICE. -o Sends translation of text to your current channel. Examples: /TRANS -m SrfRoG -f you rule man! /TRANS -n $*.com -s this is a server wallop in Spanish /TRANS -o -p i am pretending i know Portuguese /TRANS -S hola amigo lice5/help/user/tlm0000644000175000017500000000026112715251177012657 0ustar timtimUsage: TLM [channel] Makes a topic of the last MSG sent to you. The channel is optional, defaults to your current channel. See also: [WLW] [TLN] [RELM] [oper] lice5/help/user/w0000644000175000017500000000233212715251177012332 0ustar timtimUsage: W [flag [arguments]]  Usage: W [arguments]  Requests the server WHO information about a channel or users. If a channel is given, information about that channel is obtained. In the case no channel is given, and no arguments are given, WHO information about your current channel is obtained; if a flag is given, information about your current channel that corresponds to the flags is obtained. If no flag but arguments are given, all IRC is used to collect the information. Meaning of the flags: -ch who are the channel operators. -no who are the channel non-operators (lamers). -op IRC operators in your channel. -aw people who are AWAY in your channel. -he people who are not AWAY (here). -ho lists users matching the host provided, must supply a host mask as an argument. -na lists users matching the username mask provided; must supply a mask as argument. -ni lists users matching the nickname mask provided; must supply a mask as argument. -r lists users matching the realname mask provided; must supply a mask as argument. -s lists users using a server in your channel; must provide the server in the arguments. See also: [WI] [WII] [WW] lice5/help/user/se0000644000175000017500000000055312715251177012476 0ustar timtimUsage: SE [-f] [channel]  Display the exceptions for a channel. If no channel is given, the exception in your current channel are shown. The "-f" flags forces the use of server output instead of the internal cache. Note: this command is only available on networks with +e channel mode support. See also: [SV] [SC] [SI] [SB] lice5/help/user/book0000644000175000017500000000052512715251177013020 0ustar timtimUsage: BOOK -[a|d|l]  Creates/lists an addressbook fot instant emailing in combination with /IMAIL. Examples: /BOOK -a hsoc hsoc@irc.gr adds handle hsoc /BOOK -d hsoc deletes hsoc from your address book /BOOK -l lists all entries in address book See also: [IMAIL] lice5/help/user/nochat0000644000175000017500000000014112715251177013334 0ustar timtimUsage: NOCHAT  End DCC CHAT with a nick (if one already exists) See also: [CHAT] lice5/help/user/links0000644000175000017500000000043512715251177013206 0ustar timtimUsage: LINKS [server pattern [arguments]]  Displays the connetions to a server, and/or the connection hub of the server to the IRC network. ie. /LINKS *.edu shows connections of all *.edu servers and hubs /LINKS irc.ilstu.edu shows hub for server. See also: [UMODE] lice5/help/user/cycle0000644000175000017500000000015512715251177013164 0ustar timtimUsage: CYCLE Makes you cycle (PART and JOIN back) your current channel. See also: [J] [L] [CHG] lice5/help/user/theme0000644000175000017500000000040512715251177013165 0ustar timtimUsage: THEME Usage: THEME  Changes your current color and event formats to a different display. The themes are loaded from ~/.epic/themes directory. The command without arguments, displays all the available themes. See also: [SV] [SB] [PIC] lice5/help/user/dns0000644000175000017500000000036212715251177012651 0ustar timtimUsage: DNS < nick | [host | ip address] > Attempts to translate the specified IP address to a hostname and viceversa. If a nickname is given, the user's hostname or IP address is looked up. See also: [WI] [TOG] [CTOG] [DOM] lice5/help/global0000644000175000017500000000202612715251177012346 0ustar timtimStarting with LiCe 5.2.0, LiCe can now be installed globally by system admins easily. Regardless of where LiCe is installed, it will dynamically figure out where it is and will be able to load all other files including help system files automatically, once the main lice.irc file is loaded. Because system wide installs are often going to be owned by root, there is no point having the /UPDATE function working. You can now easily disable the update functionality of LiCe by creating a file in the LiCe root directory called disable_update. If this file exists on load, the /UPDATE function will be removed and the main toggle of U (/TOG U) will be removed from /TOG. This removes the /update functionality. You may wish to also delete the update text from the help directory. Users can now install their own *.reason file in the ~/.lice/ directory. This allows each user to have their own reason file with whatever messages they'd like. If the reason file doesn't exist, LiCe will fall back to using the globally installed reason files. lice5/help/oper/0000755000175000017500000000000012715251177012130 5ustar timtimlice5/help/oper/boot0000644000175000017500000000023012715251177013011 0ustar timtimUsage: BOOT  Kicks and bans a nick from all the channels you are currently in (if found), at once. See also: [KICK] [BAN] [user] lice5/help/oper/hop0000644000175000017500000000024612715251177012643 0ustar timtimUsage: HOP  Gives channel half-operator status (+h) to the specified nick(s) See also: [REOP] [DHOP] [QUIET] [VOICE] [MASS] lice5/help/oper/kick0000644000175000017500000000310712715251177012775 0ustar timtimUsage: K [reason]  Usage: KA [reason]  Usage: KB [reason]  Usage: KI [reason]  Usage: KF [reason]  Usage: KH [reason]  Usage: KU [reason]  Usage: MK [:reason]  These commands perform different type of kicks to a nick or group of nicks on your current channel. When "nick" is specified, a fast kick is done to that given nick. If a nick!user@host pattern is specified, then all matched nicks are kicked. Reasons are optional, the program will pick one, if none are provided. K - Kick. Plain kick, matching users. KA - Kick + IP Ban. Like a normal "/BAN". KB - Kick + Ban. Like a normal "/BAN". KF - Kick + Fuck-off-and-go-to-Hell ban (drastic host ban). KH - Kick + Host ban. People from that host are out. KU - Kick + User ban. Bans all users with same userhost. MK - Multiple kicks. Kick one or more users at once. KBI - Kick + Ban + Ignore. Ignores the users you are kicking. KI - Same as "/KBI". Edit the file "~/.lice/kick.reasons" to customize the default reason. Examples: /K mikh you momo! kicks mikh from current channel /KB *@*.edu school sucks! kick and bans all users on the *.edu domain. /KI *osek* you lamer!! kick ban ignores all users with the word "osek" contained in their address. See also: [BAN] [RBAN] [USER] [BWORD] [RK] [BOOT] lice5/help/oper/bword0000644000175000017500000000146612715251177013177 0ustar timtimUsage: BWORD [-fslr] <#channel> [list of words] Kickbans nicks that say the words specified with /BWORD for that channel. To BAN a word in all channels, use #* as the channel. Examples: "/BWORD -f #LiCe phoenix kewl" - Bans 'phoenix' and 'kewl' from '#LiCe'. "/BWORD -s &hut op me" - Bans string 'op me' from '&hut'. "/BWORD #* osek" - Bans 'osek' from all your channels. "/BWORD -l #Linux" - Shows banned words in #Linux "/BWORD -l" - Shows banned words in current channel. "/BWORD -r #LiCe" - Removes all banned words from '#LiCe'. "/BWORD -r" - Removes banned words from current #. "/BWORD -a" - Removes all banned words. See also: [KICK] [BAN] [USER] lice5/help/oper/mass0000644000175000017500000000130712715251177013017 0ustar timtimUsage: MASS <-flag> [pattern [reason of kick]] Performs multiple commands in your current channel. Flags: -o MassOP (+o) non-op'd nicks. -d MassDEOP (-o) op'd nicks. -h MassHOP (+h) non-halfop'd nicks. -n MassDHOP (-h) halfop'd nicks. -v MassVOICE (+v) non-op'd nicks. -q MassQUIET (-v) voice'd nicks. -k MassKICK all nicks. -l MassKICK non-op'd nicks (lamers) i.e /MASS -o *@*usf.edu MassOP all nicks from *@*usf.edu /MASS -l *@*.com MassKICK non-opped nicks at *@*.com /MASS -v MassVOICE all nicks that match *@* /MASS -v *@* Same as above. /MASS -l *.edu school sux!!! /MASS -k *.com paying for internet is lame!!!! See also: [OP] [DOP] [VOICE] [QUIET] [KICK] lice5/help/oper/binv0000644000175000017500000000220512715251177013010 0ustar timtimUsage: BINV  Channel mode (+I) that makes possible for the specified nick to JOIN your current channel even if channel is invite-only. Flags: a invites the IP address, eg. *!*@207.240.167.* c invites the country or inet organization, eg. *!*@*.net h invites the nick's host, eg. *!*@ppp-80.mistik.net f invites the nick's host with a pattern *!*@*mistik.net n Simple *!*user@*host inv mask (default) u invites only the username used by a nick, eg. *!*srfrog@* Exception types: c=country e=eleet n=normal s=site f=freebie u=username ie. /BINV SrfRoG if SrfRoG is online. /BINV cag@* srfrog@* lice@* multiple on usernames. /BINV srfrog@*.mistik.net *@*.com specific hosts /BINV SrfRoG!*@*.ed SrfRoG's under *.edu. Note: IP addresses and hacked usernames are appropiately masked and marked. Only one flag can be specified for a given nick. When pattern(s) are used, flags are ignored. Our BINV procedure is smart enough to remove any conflicting invites before doing the actual marking. See also: [user] [KICK] [BWORD] [BOOT] [BAN] [BEXC] lice5/help/oper/user0000777000175000017500000000000012715251257014141 2../userustar timtimlice5/help/oper/refriend0000644000175000017500000000040112715251177013644 0ustar timtimUsage: refriend [channel] Cycle through the current (or specified) channel and reop everyone in your friend list who has the +o flag. This can be used to ensure everyone on your friend list has op status. See also: [FRIEND] [OP] lice5/help/oper/oper0000644000175000017500000000014012715251177013013 0ustar timtim 3 11@3..11@ ( Channel operator commands ) 3 (\--/) / 3 (.>__<.) 3 ^^^ ^^^ lice5/help/oper/quiet0000644000175000017500000000032712715251177013204 0ustar timtimUsage: QUIET  Removes channel voice status (-v) from the specified nick(s) Voice status is required to speak in moderated (+m) channels. See also: [OP] [DOP] [VOICE] [MASS] lice5/help/oper/binds0000777000175000017500000000000012715251257014403 2../bindsustar timtimlice5/help/oper/bexc0000644000175000017500000000222012715251177012770 0ustar timtimUsage: BEXC  Channel mode (+e) that makes possible for the specified nick to JOIN your current channel even if banned. Flags: a exempts the IP address, eg. *!*@207.240.167.* c exempts the country or inet organization, eg. *!*@*.net h exempts the nick's host, eg. *!*@ppp-80.mistik.net f exempts the nick's host with a pattern *!*@*mistik.net n Simple *!*user@*host exc mask (default) u exempts only the username used by a nick, eg. *!*srfrog@* Exception types: c=country e=eleet n=normal s=site f=freebie u=username ie. /BEXC SrfRoG if SrfRoG is online. /BEXC cag@* srfrog@* lice@* multiple exempts on usernames. /BEXC srfrog@*.mistik.net *@*.com exempts on specific hosts /BEXC SrfRoG!*@*.edu exempts SrfRoG's under *.edu. Note: IP addresses and hacked usernames are appropiately masked and marked. Only one flag can be specified for a given nick. When pattern(s) are used, flags are ignored. Our BEXC procedure is smart enough to remove any conflicting exempts before doing the actual marking. See also: [user] [KICK] [BWORD] [BOOT] [BAN] [BINV] lice5/help/oper/op0000644000175000017500000000023712715251177012473 0ustar timtimUsage: OP  Gives channel operator status (+o) to the specified nick(s) See also: [REOP] [DOP] [QUIET] [VOICE] [MASS] lice5/help/oper/dhop0000644000175000017500000000024012715251177013001 0ustar timtimUsage: DHOP  Removes channel half-operator status (-h) from the specified nick(s) See also: [HOP] [QUIET] [VOICE] [MASS] lice5/help/oper/wall0000644000175000017500000000041712715251177013014 0ustar timtimUsage: WALL [channel]  Sends a messages to channel operators on one of your channels. The channel name is optional, defaults to your current channel. You must be a channel operator in order to send WALLs. See also: [MSAY] [MME] [WLM] [WLN] lice5/help/oper/relnk0000644000175000017500000000026412715251177013170 0ustar timtimUsage: RELNK [nick]  Uses last recieved notice as the kick reason to "nick" If no nick is given, it acts like "/RELN". See also: [RELM] [RELN] [RELMK] [user TLN] lice5/help/oper/reop0000644000175000017500000000035012715251177013016 0ustar timtimUsage: REOP [nick1 nick2 ... nicks] Gives channel operator status (+o) to the current channel ops. Along with any other nicks you specify. Useful for re-synchs. See also: [OP] [DOP] [QUIET] [VOICE] [MASS] lice5/help/oper/relmk0000644000175000017500000000026512715251177013170 0ustar timtimUsage: RELMK [nick]  Uses last recieved message as the kick reason to "nick" If no nick is given, it acts like "/RELM". See also: [RELM] [RELN] [user TLM] [RELNK] lice5/help/oper/wlm0000644000175000017500000000023612715251177012653 0ustar timtimUsage: WLM [channel] Sends a wall of your last rec'v message. The channel is optional, defaults to your current channel. See also: [WALL] [WLN] lice5/help/oper/wln0000644000175000017500000000023512715251177012653 0ustar timtimUsage: WLN [channel] Sends a wall of your last rec'v notice. The channel is optional, defaults to your current channel. See also: [WALL] [WLM] lice5/help/oper/rinv0000644000175000017500000000176712715251177013044 0ustar timtimUsage: RINV  Usage: RINV -  Usage: RINV <#inv number>  Removes invite(s) for a certain nick or invite(s) for user@host mask that matches with pattern(s). Flags: a ALL. Removes all the invites in your channel. s SELECTIVE. Removes only the invites you select. Only one flag can be used at a time. ie. /RINV SrfRoG uninvs "SrfRoG", if online. /RINV *.edu uninvs all *.edu hosts invned. /RINV *root@* uninvs all root users invned. /RINV *anon?????@*.fi uninvs host matching mask. /RINV *@* removes all invs. /RINV #2 removes inv number 2. /RINV -a removes all invs. /RINV -s prompts you before uninv. Note: pattern "*@*" and flag "-a" have the same effect. The third form of the command lets you specify invs to remove single invs by number or multiple invs if more than one number are selected. This command is only available on networks with +I channel mode support. See also: [BINV] [KICK] [C] [RBAN] [REXC] lice5/help/oper/dop0000644000175000017500000000023112715251177012631 0ustar timtimUsage: DOP  Removes channel operator status (-o) from the specified nick(s) See also: [OP] [QUIET] [VOICE] [MASS] lice5/help/oper/ban0000644000175000017500000000245412715251177012620 0ustar timtimUsage: /BAN [-a|-c|-h|-i|-f|-g|-p|-n|-u|-t ]  Usage: /BAN  Channel mode (+b) that makes impossible for the specified nick to JOIN your current channel. Flags: a BANs the IP address, eg. *!*user@37.54.65.* c BANs the country or top-level domain, eg. *!*@*.edu h BANs the nick's host, eg. *!*@ppp-80.aol.com i BANs the entire C-class IP, eg. *!*@37.54.65.* p BANs the nick's host with a pattern *!*@*aol.com n Simple *!*user@ppp*.host ban mask (default) g Generic *!*user@*.host ban mask f Fuck-off ban, eg. *!*@u*-*-*.dialup.planetinternet.be u BANs only the username used by a nick, eg. *!*rowan@* t Temporary BAN. The ban is removed after X seconds. Bantypes: c=country e=eleet n=normal s=site f=fuck-off u=username ie. /BAN Vassago Lamer1 /BAN -af Vassago Lamer1 /BAN root@* rowan@* anon*@* /BAN rowan@*.lame.net *@*.aol.com /BAN Vassago!*@*.edu Lamer1 /BAN -t 60 Vassago Note: IP addresses and hacked usernames are appropiately masked and banned. Only one flag can be specified for a given nick. When pattern(s) are used, flags are ignored. Our ban procedure is smart enough to remove any conflicting bans before doing the actual banning. See also: [user] [KICK] [BWORD] [BOOT] [BEXC] [BINV] lice5/help/oper/rk0000644000175000017500000000067512715251177012477 0ustar timtimUsage: RK <-flags> [reason of kick]  Randomly kicks nicks from your current channel. Flags: a KICKs anyone, ops and non-ops. o KICKs channel operators randomly (if any) l KICKs non-channel operators randomly (if any) If the reason of the KICK is not specified, the default message will be used. ie. /RK -o Ops are LAIM!!! /RK -l LAIM is LAYME!! /RK -a EyE YaM NuTZ!!! See also: [KICK] [BOOT] [user USERLIST] lice5/help/oper/voice0000644000175000017500000000032312715251177013156 0ustar timtimUsage: VOICE  Gives channel voice status (+v) to the specified nick(s) Voice status is required to speak in moderated (+m) channels. See also: [OP] [DOP] [QUIET] [MASS] lice5/help/oper/adcc0000777000175000017500000000000012715251257013771 2../adccustar timtimlice5/help/oper/rban0000644000175000017500000000216212715251177012776 0ustar timtimUsage: RBAN  Usage: RBAN -  Usage: RBAN <#ban number>  Removes ban(s) for a certain nick or ban(s) for user@host mask that matches with pattern(s). Flags: a ALL. Removes all the bans in your channel. s SELECTIVE. Removes only the bans you select. l DURATION. Removes bans older than minutes specified. n NICK. Removes all bans made by nick specified. Only one flag can be used at a time. ie. /RBAN SrfRoG unbans "SrfRoG", if online. /RBAN *.edu unbans all *.edu hosts banned. /RBAN *root@* unbans all root users banned. /RBAN *anon?????@*.fi unbans host matching mask. /RBAN *@* removes all bans. /RBAN #2 removes ban number 2. /RBAN -a removes all bans. /RBAN -s prompts you before unban. /RBAN -n evilfrog removes all evilfrog's bans. /RBAN -l 30 removes bans older than 30 minutes. Note: pattern "*@*" and flag "-a" have the same effect. The third form of the command lets you specify bans to remove single bans by number or multiple bans if more than one number are selected. See also: [BAN] [KICK] [C] [REXC] [RINV] lice5/help/oper/c0000644000175000017500000000070112715251177012273 0ustar timtimUsage: C [<-flag> | <-/+>modes [arguments]]  Changes the channel modes for your current channel. If no modes or arguments are specified, the current channel modes are displayed. Flags: -c Clears all modes from channel. -k Removes any channel key -1 Changes channel modes to "+inst" only. -2 Changes channel modes to "+nst" only. -3 Changes channel modes to "+nt" only. See also: [T] lice5/help/oper/rexc0000644000175000017500000000201112715251177013006 0ustar timtimUsage: REXC  Usage: REXC -  Usage: REXC <#exception number>  Removes exception(s) for a certain nick or exception(s) for user@host mask that matches with pattern(s). Flags: a ALL. Removes all the exceptions in your channel. s SELECTIVE. Removes only the exceptions you select. Only one flag can be used at a time. ie. /REXC SrfRoG unexcs "SrfRoG", if online. /REXC *.edu unexcs all *.edu hosts excned. /REXC *root@* unexcs all root users excned. /REXC *anon?????@*.fi unexcs host matching mask. /REXC *@* removes all excs. /REXC #2 removes exc number 2. /REXC -a removes all excs. /REXC -s prompts you before unexc. Note: pattern "*@*" and flag "-a" have the same effect. The third form of the command lets you specify excs to remove single excs by number or multiple excs if more than one number are selected. This command is only available on networks with +e channel mode support. See also: [BEXC] [KICK] [C] [RBAN] [RINV] lice5/help/oper/et0000644000175000017500000000040312715251177012460 0ustar timtimUsage: ET  Puts the topic from or your current channel on the input line for quick editing. To quit without changing the topic either leave topic unchanged, or blank the link (^u) and press return. See also: [T] [oper] lice5/help/flood0000644000175000017500000000413412715251177012213 0ustar timtim----------------------- + LiCe Flood Routines + ----------------------- LiCe flood protection is broken down into two catagories The first is channel (or public) protections and the second is private (or message) protections. Each of these can be toggled globally using: /TOG C - Toggle Public/Channel protections /TOG F - Toggle Private/Message protections If they are toggled off at the global level, they will not be triggered, regardless of other settings. Therefore if you wish to disable all LiCe flood protections, ensure that TOG C and F are off. You can trigger how sensitive flood protection is using /SENS F Public / Channel Proections This flood protection is triggered if someone floods a channel you are on with public messages. Usually this would be a big wall of public text to the channel, but may be lots of nick changes or joins/parts. NOTE:These will not be triggered unless you are a chanop in the channel being flooded. The reason for this is because you are unable to do anything (kick/ban) the flooder unless you are an op. For chanops, the flood protection works like this: If the flooder is in your FRIEND list with the +F flag, no flood protection will be triggered. If /CTOG C is on, the flooder will be kicked unless: /CTOG O is on, and the flooder is an OP /CTOG V is on, and the flooder is a Voice If /CTOG C is off, the flooder will not be kicked. If /CTOG F is on, the flooder will be banned (regardless of the state of /CTOG C) Private / Message Protections These are triggered if someone sends you a lot of MSG/NOTICE/ CTCP messages. There is no control offered other than the global settings. If you are flooded, you will automatically IGNORE the person flooding you. This will be: Permanently if /SENS 2 is 0 Temporary, for the amount of seconds that /SENS 2 is set to. Additionally, the client will fully isolate itself, that is IGNORE *!*@* for the number of seconds in /SENS I. This helps ensure client stability. If the server supports SILENCE or CALLERID (both forms of server-side ignore), these will be enabled as well for the amount of time in /SENS I. lice5/help/binds/0000755000175000017500000000000012715251177012262 5ustar timtimlice5/help/binds/user0000777000175000017500000000000012715251257014273 2../userustar timtimlice5/help/binds/oper0000777000175000017500000000000012715251257014251 2../operustar timtimlice5/help/binds/binds0000644000175000017500000000013012715251177013276 0ustar timtim3 11@3..11@ ( Special key binds ) 3 (\--/) / 3 (.>__<.) 3 ^^^ ^^^ lice5/help/binds/adcc0000777000175000017500000000000012715251257014123 2../adccustar timtimlice5/help/binds/screen0000644000175000017500000000235612715251177013472 0ustar timtim LiCe Pseudo-Screen key bindings Command key: ctrl-w (^w) Literal: ^w-a clear f logging H + create c exec (sh) ! version v name y monitor M suspend z + query q other a next n time t switch ' next last ^X help ? prev p list w info i quit irc \ refresh l kill k readbuf < writebuf > lastmsg m uptime u + server s hide h + channel j license , * grow g * shrink r balance b * kill win K * next win N * prev win P beep ^G opervision o jump win 0-9 double bar d partyline L ^ double bar D add win C * - only for shared windows on same screen. + - creates a new window. ^ - all windows See also: [basic] lice5/help/binds/basic0000644000175000017500000000307312715251177013271 0ustar timtim Key bindings that make LiCe the easiest script to use :) Options: Ctrl-a jumps the cursor to the beggning of the line. Esc-f lists people that are netsplit. Esc-k to JOIN the last channel you were invited to. Esc-r to remove nicks from your current server tablist. Esc-\ quickly update the lag indicator in the status bar. Ctrl-l will refresh all your screens. Ctrl-o to IGNORE last nick that sent you a message. Ctrl-r to INVITE last nick that send you a message. Ctrl-s freezes your irc screen (Scroll Lock) Ctrl-q returns your irc screen (No Scroll) Ctrl-u erases everything in your input prompt. Ctrl-x to switch between channels in the same window. Ctrl-z to suspend current IRC session and go to shell. TAB flips thru last nicks that sent you a message/notice. nickname completion. matches the contents of your input to the list of nicks in your current channel, and fixes the input for the best match. it will display a list of all matches, if more than one. filename completion (same as nick completion, but for files). Uses a very simple logic to determine wether to complete filenames or nicks. Arrow-UP command backward history (last command typed). Arrow-DOWN command forward history. Arrow-LEFT moves to the leftmost character. Arrow-RIGHT moves to the rightmost character. PgUp display last screenful of text. PgDn display next screenful of text (after a PgUp). See also: [screen] [user TOG] [user CTOG] [user SENSORS] lice5/help/quickstart0000644000175000017500000000641512715251177013306 0ustar timtim <<< LiCe QuickStart Guide >>> This guide will help you quickly get started using the LiCe script for EPIC. - Settings - LiCe has a number of commands to change the settings in use. Each command will bring up a menu with a short explaination of what they do. You can change more than one setting at once. If you have used previous versions of LiCe, you'll be used to having to /SAVE settings. /SAVE is no longer required in LiCe 5.2.0, all settings are now written to the LiCe save database automatically. 3/SENSORS - Change LiCe sensor settings. Unless you understand what you're doing, it's only recommended to change the AutoNick and the AutoAWAY settings. 3/TOG - Change main LiCe toggles. Most users these days prefer to turn off Flood Protection, which is on by default. Also note that automatically checking for updates is on by default. This connects to the LiCe webserver when you load LiCe so you may wish to turn this off. Your main toggles are show on the status bar (if you're using the default theme) 3/MTOG - Change settings relating to messaging in LiCe. Setting save to disk is recommended to ensure if your client crashes or disconnects you won't lose your messages. 3/WTOG - Change settings relating to windows in LiCe. Windows are an advanced topic. Setting global status titlebar will show the topic of each channel at the top of the screen which many users find useful. 3/DTOG - Settings relating to DCC file transfers. 3/CTOG - Change the toggles for the channel you're currently on. - Messages - LiCe will log message when you're set away, as long as /MTOG U is enabled. 4/GONE - This will set you away on the server. If you don't specify a message after the command, LiCe will use a random message from the gone.reasons file. 4/BACK - This will set you as back on the server. You can specify a message to tell people why you're back. 4/PLAY - This will show you all messages logged while you were away. It has a small built in menu to help you use it. 4/ERASE - Delete all messages from your away log. - Useful Commands - List of commands that will be helpful. 5/J - Join command. Used to join a channel, i.e. /J #LiCe 5/L - Leave command. Used to leave the channel you're on. 5/AR - Set a word (or words) that will be highlighted when said in a channel you're in. Makes it easy to see your nickname when in a busy channel and also will log any mention of it when you are set away. 5/THEME - Change the appearance of LiCe! There are many different themes to choose from. 5/NOIG - You can use this command to remove any ignores that are currently active. 5/SC - List all the nicks on the current channel. 5/WHOIS - Will perform a whois on the nickname requested. i.e. /WHOIS tjh 5/QUIT - Quit epic5 and resume your normal boring life! lice5/help/todo0000644000175000017500000000133312715251177012053 0ustar timtimLatest update: 1st Sept 2015 ============================ This is a list of random bits and pieces I'll be working on for LiCe5 in the future. Feel free to email me, tim@muppetz.com with any thing else you'd like to see! * Remove all compatability stuff in lice.epic5, or at least use only what we need. I have started on this. Moving to serverctl and windowctl... * Update /ctog to support server+channel instead of just channel. [Hard] * Fix broken /adcc - Nearly. - DONE(?) * Update /noig to not display /ctog Q channels. [DONE - Displays a notice instead though] * Make autocompelte work for HELP * Add NOTE into dbmctl [DONE] Use epic's built in log function, rather than the chanlog ^ON method? * Rebuild the themes... lice5/help/credits0000644000175000017500000000555212715251177012552 0ustar timtim ascii by stain .a&$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$&a. $$ $$$$&a $' s `$' s `$$ $$ $$$$$$ $ $ $ $ $$ $$ $$$$$$ $ $ $ $ $$ $$ $ $ $ $ssss$ sssss$$ $$ $ $ $ $ $ $ $$ $$. $ ,$ .a. $ ,$. $ ,$$ `$$&@uou@&$$.a$$$$&@uou@&$$$&@uou@&$$' People responsible for the development of LiCe (directly or not) 3All major code by SrfRoG (cag@codehack.com) tjh (tim@muppetz.com) whitefang(tyler@ionise.org) HSOC 3Lots of help from asmodean, mikh, hop, #epic 3BETA Testing Team versions 1.x - 2.x Lamer asudem NetJunkie 3BETA Testing Team versions 2.x - 2.3.x asmodean casret kendi Benzoate Rival bUspAr vfx om ratphour SpyDer-X tempest Tantalos _Trojan_ moonwolf jewels kendi RainMkr Zelix cobol SLK Sabre mikh 3BETA Testing Team versions 2.3.x - 2.6.x assassin ashee casret Godsey greensun KrAzyCh|k nicole Sabre sate Quisition ratphour rival Sabre sage makaze tantalos 3BETA Testing Team versions 2.6.x - 3.1.x eternal_ casret Scuzzi asmodean Sabre ratphour ashee Coolio myc |mmortaL nroff 3BETA Testing Team versions 3.1.x - 4.x Sabre nroff GoNINzo HSOC LA Quisition zyeshan Q Charvel plan9 gaiden 3BETA Testing Team versions 5.x whitefang HSOC Q z2e 3Debugging/patches (on different versions) tempest SpyDer-X SLK te0 Kasi sate Sabre Charvel HSOC whitefang tjh 3Helptext versions 1.x - 2.x moonwolf 3Helptext traductions versions 2.3.x - 2.6.x English - SrfRoG Italian - te0 German - Kasi Polish - Charvel 3FAQ (Frequent Asked Questions) text nicole, BusDriver, tjh 3Intro ASCII Pictures soi, ZiRCoN 3Regards BasketCse WormWood 3Script writers that never get proper credit YaZoO CKeeper daemon hop Robey 3Special thanks to the people that code the ircII/ircII-EPIC Michael Sandrof, Troy Rollo, Matthew Green, Jeremy Nelson For the rest of the names and credits type /INFO. And, of course, thanks to all the 4000+ LiCe users net-wide! Special honour mention to Christopher Eden "SpyDer-X", who passed the way on December 26th, 1995. From your friends in #LiCe, rest in peace SpyDer... LiCe Copyright (c) 1993-2000 C.A.G. - All Rights Reserved. Copyright (c) 2001-2015 T.J.H. - All Rights Reserved. Send all comments, suggestions, etc.. to: tim@muppetz.com Visit us at github: https://github.com/tjbh/lice See also: [LICENSE] [COPYING] lice5/help/party0000644000175000017500000000567112715251177012256 0ustar timtim The module 'PARTY' is a small-level implementation of a 'partyline'. For those people that dont know what a partyline is: it's a bunch of users gathered, via some abstract medium, discussing random topics. Think of it as a little irc of your own. The mediums used in our partyline are DCC CHAT and DCC RAW. Users connect to you (the hub) via DCC CHAT and the chat is shared with any other users currently on the partyline. More 'hubs' can be linked to you and each others, making your partyline larger. The partyline is most effective when the server routing is bad (lotta lag) and you want to talk to a group of people, just make them join your partyline via DCC CHAT or link their own hubs to yours. Users on DCC CHAT jump to your partyline by typing '.CHAT' from the chat. To load the partyline module, just type '/PARTY'. Commands valid on the partyline to you: .  - Talk on the partyline .ME  - Do an action. .NAMES - List of nicks connected to you. .WHO - Extended list of all nicks connected, on all hubs. .INVITE  - Invite an outside nick to the partyline. .LINK  - Link to a remote hub. Password might not be necessary unless the remote hub requires it. .UNLINK  .UNLINK * - Unlink a hub by name, or '*' to unlink all. .LISTEN - Allow remote hub connections to you. .CLOSE - Close remote hub connection access. .BOOT  - Boot (kick equiv.) a nick from the partyline. Will be booted off any other hubs that allow remote boots. .JUPE - Disconnect a linked hub on remotely. .TOPIC [topic] - Change or view the hub's current topic. Topics are local, not shared remotely. .SETUP - Change internal settings to the partyline. It's recommended you do this at least once. .STATUS - View partyline's information. .WALL  - Send a message to only the people connected to you. .WALLOP  - Send a message to only other hubs. WARNING * * * * * * * * * * * * * * * * * * * * * * * * * * * WARNING * Notice of possible hack attempts: * WARNING * When allowing remote hub connections, you leave * WARNING * a port of your system 'open' to listen for * WARNING * incoming connections. Some people might attempt * WARNING * to hack into your system via this. Consider this * WARNING * notice your fair warning. Although it's unlikely * WARNING * kiddie-haxorz will check all the hosts for this, * WARNING * it's important to have knowledge about this. As * WARNING * precaution, close all remote connections access * WARNING * ports when not in use. * WARNING * * * * * * * * * * * * * * * * * * * * * * * * * * * lice5/help/copying0000644000175000017500000003543512715251177012570 0ustar timtim! ! GNU GENERAL PUBLIC LICENSE ! Version 2, June 1991 ! Copyright (C) 1989, 1991 Free Software Foundation, Inc. 675 Mass Ave, Cambridge, MA 02139, USA Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. Preamble The licenses for most software are designed to take away your freedom to share and change it. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change free software--to make sure the software is free for all its users. This General Public License applies to most of the Free Software Foundation's software and to any other program whose authors commit to using it. (Some other Free Software Foundation software is covered by the GNU Library General Public License instead.) You can apply it to your programs, too. When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for this service if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs; and that you know you can do these things. To protect your rights, we need to make restrictions that forbid anyone to deny you these rights or to ask you to surrender the rights. These restrictions translate to certain responsibilities for you if you distribute copies of the software, or if you modify it. For example, if you distribute copies of such a program, whether gratis or for a fee, you must give the recipients all the rights that you have. You must make sure that they, too, receive or can get the source code. And you must show them these terms so they know their rights. We protect your rights with two steps: (1) copyright the software, and (2) offer you this license which gives you legal permission to copy, distribute and/or modify the software. Also, for each author's protection and ours, we want to make certain that everyone understands that there is no warranty for this free software. If the software is modified by someone else and passed on, we want its recipients to know that what they have is not the original, so that any problems introduced by others will not reflect on the original authors' reputations. Finally, any free program is threatened constantly by software patents. We wish to avoid the danger that redistributors of a free program will individually obtain patent licenses, in effect making the program proprietary. To prevent this, we have made it clear that any patent must be licensed for everyone's free use or not licensed at all. The precise terms and conditions for copying, distribution and modification follow. GNU GENERAL PUBLIC LICENSE TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION 0. This License applies to any program or other work which contains a notice placed by the copyright holder saying it may be distributed under the terms of this General Public License. The "Program", below, refers to any such program or work, and a "work based on the Program" means either the Program or any derivative work under copyright law: that is to say, a work containing the Program or a portion of it, either verbatim or with modifications and/or translated into another language. (Hereinafter, translation is included without limitation in the term "modification".) Each licensee is addressed as "you". Activities other than copying, distribution and modification are not covered by this License; they are outside its scope. The act of running the Program is not restricted, and the output from the Program is covered only if its contents constitute a work based on the Program (independent of having been made by running the Program). Whether that is true depends on what the Program does. 1. You may copy and distribute verbatim copies of the Program's source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice and disclaimer of warranty; keep intact all the notices that refer to this License and to the absence of any warranty; and give any other recipients of the Program a copy of this License along with the Program. You may charge a fee for the physical act of transferring a copy, and you may at your option offer warranty protection in exchange for a fee. 2. You may modify your copy or copies of the Program or any portion of it, thus forming a work based on the Program, and copy and distribute such modifications or work under the terms of Section 1 above, provided that you also meet all of these conditions: a) You must cause the modified files to carry prominent notices stating that you changed the files and the date of any change. b) You must cause any work that you distribute or publish, that in whole or in part contains or is derived from the Program or any part thereof, to be licensed as a whole at no charge to all third parties under the terms of this License. c) If the modified program normally reads commands interactively when run, you must cause it, when started running for such interactive use in the most ordinary way, to print or display an announcement including an appropriate copyright notice and a notice that there is no warranty (or else, saying that you provide a warranty) and that users may redistribute the program under these conditions, and telling the user how to view a copy of this License. (Exception: if the Program itself is interactive but does not normally print such an announcement, your work based on the Program is not required to print an announcement.) These requirements apply to the modified work as a whole. If identifiable sections of that work are not derived from the Program, and can be reasonably considered independent and separate works in themselves, then this License, and its terms, do not apply to those sections when you distribute them as separate works. But when you distribute the same sections as part of a whole which is a work based on the Program, the distribution of the whole must be on the terms of this License, whose permissions for other licensees extend to the entire whole, and thus to each and every part regardless of who wrote it. Thus, it is not the intent of this section to claim rights or contest your rights to work written entirely by you; rather, the intent is to exercise the right to control the distribution of derivative or collective works based on the Program. In addition, mere aggregation of another work not based on the Program with the Program (or with a work based on the Program) on a volume of a storage or distribution medium does not bring the other work under the scope of this License. 3. You may copy and distribute the Program (or a work based on it, under Section 2) in object code or executable form under the terms of Sections 1 and 2 above provided that you also do one of the following: a) Accompany it with the complete corresponding machine-readable source code, which must be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, b) Accompany it with a written offer, valid for at least three years, to give any third party, for a charge no more than your cost of physically performing source distribution, a complete machine-readable copy of the corresponding source code, to be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, c) Accompany it with the information you received as to the offer to distribute corresponding source code. (This alternative is allowed only for noncommercial distribution and only if you received the program in object code or executable form with such an offer, in accord with Subsection b above.) The source code for a work means the preferred form of the work for making modifications to it. For an executable work, complete source code means all the source code for all modules it contains, plus any associated interface definition files, plus the scripts used to control compilation and installation of the executable. However, as a special exception, the source code distributed need not include anything that is normally distributed (in either source or binary form) with the major components (compiler, kernel, and so on) of the operating system on which the executable runs, unless that component itself accompanies the executable. If distribution of executable or object code is made by offering access to copy from a designated place, then offering equivalent access to copy the source code from the same place counts as distribution of the source code, even though third parties are not compelled to copy the source along with the object code. 4. You may not copy, modify, sublicense, or distribute the Program except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense or distribute the Program is void, and will automatically terminate your rights under this License. However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance. 5. You are not required to accept this License, since you have not signed it. However, nothing else grants you permission to modify or distribute the Program or its derivative works. These actions are prohibited by law if you do not accept this License. Therefore, by modifying or distributing the Program (or any work based on the Program), you indicate your acceptance of this License to do so, and all its terms and conditions for copying, distributing or modifying the Program or works based on it. 6. Each time you redistribute the Program (or any work based on the Program), the recipient automatically receives a license from the original licensor to copy, distribute or modify the Program subject to these terms and conditions. You may not impose any further restrictions on the recipients' exercise of the rights granted herein. You are not responsible for enforcing compliance by third parties to this License. 7. If, as a consequence of a court judgment or allegation of patent infringement or for any other reason (not limited to patent issues), conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot distribute so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not distribute the Program at all. For example, if a patent license would not permit royalty-free redistribution of the Program by all those who receive copies directly or indirectly through you, then the only way you could satisfy both it and this License would be to refrain entirely from distribution of the Program. If any portion of this section is held invalid or unenforceable under any particular circumstance, the balance of the section is intended to apply and the section as a whole is intended to apply in other circumstances. It is not the purpose of this section to induce you to infringe any patents or other property right claims or to contest validity of any such claims; this section has the sole purpose of protecting the integrity of the free software distribution system, which is implemented by public license practices. Many people have made generous contributions to the wide range of software distributed through that system in reliance on consistent application of that system; it is up to the author/donor to decide if he or she is willing to distribute software through any other system and a licensee cannot impose that choice. This section is intended to make thoroughly clear what is believed to be a consequence of the rest of this License. 8. If the distribution and/or use of the Program is restricted in certain countries either by patents or by copyrighted interfaces, the original copyright holder who places the Program under this License may add an explicit geographical distribution limitation excluding those countries, so that distribution is permitted only in or among countries not thus excluded. In such case, this License incorporates the limitation as if written in the body of this License. 9. The Free Software Foundation may publish revised and/or new versions of the General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. Each version is given a distinguishing version number. If the Program specifies a version number of this License which applies to it and "any later version", you have the option of following the terms and conditions either of that version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of this License, you may choose any version ever published by the Free Software Foundation. 10. If you wish to incorporate parts of the Program into other free programs whose distribution conditions are different, write to the author to ask for permission. For software which is copyrighted by the Free Software Foundation, write to the Free Software Foundation; we sometimes make exceptions for this. Our decision will be guided by the two goals of preserving the free status of all derivatives of our free software and of promoting the sharing and reuse of software generally. NO WARRANTY 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. END OF TERMS AND CONDITIONS lice5/help/license0000644000175000017500000000277512715251177012543 0ustar timtim LiCe (Ircii Overlay Script Program) Copyright (C) 1993-2016 SrfRoG (cag@codehack.com) Copyright (C) 2000-2016 tjh (tim@muppetz.com) & whitefang This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to: Free Software Foundation, Inc. 675 Mass Ave, Cambridge, MA 02139, USA. Ircii is Copyright (c) 1991 by Michael Sandrof. Versions 2.11 to 2.2pre7 Copyright (c) 1991 by Troy Rollo. Versions 2.2pre8 and beyond (currently 2.9) copyright (c) 1992-96 Matthew Green. Some modifications made to the original ("stock") client: Copyright (C) 1993, 1996 Jeremy Nelson, Copyright (C) 1994 Jake Khuon, Copyright (C) 1995, 2000 Jeremy Nelson and others ("EPIC software labs"), the rights to which are granted non-exclusively to matthew green and are provided to you under the terms of this license. Screen is Copyright (c) 1993 Juergen Weigert, Michael Schroeder, Copyright (c) 1987 Oliver Laumann lice5/help/adcc/0000755000175000017500000000000012715251177012055 5ustar timtimlice5/help/adcc/user0000777000175000017500000000000012715251257014066 2../userustar timtimlice5/help/adcc/oper0000777000175000017500000000000012715251257014044 2../operustar timtimlice5/help/adcc/binds0000777000175000017500000000000012715251257014330 2../bindsustar timtimlice5/help/adcc/adcc0000644000175000017500000000050712715251177012674 0ustar timtim Usage: ADCC  aDCC is the LiCe enhancement to the DCC command. aDCC is a file transfer protocol, which manages all DCC GET/SEND transactions. The main structure of aDCC comprehends a single queue for all SENDs and AutoCLOSE of SENDs that dont make connection. See also: [commands] lice5/help/adcc/commands0000644000175000017500000000246512715251177013610 0ustar timtim These are subcommands of the ADCC command: EDIT To edit details of aDCC offer packs. OFFER Create aDCC file offer packs. PLIST Display the file offers to nicks/channels. Usage: /ADCC PLIST [*|] ie. /ADCC PLIST send to "channel" /ADCC PLIST send to "nick" /ADCC PLIST * all channels you are on. /ADCC PLIST same as above. /ADCC PLIST send to two nicks. /ADCC PLIST send to two channels. /ADCC PLIST combo :) QUEUE Manipulate the status of the AutoSEND queue, and view all files queued. NOTICE Announce your current channel that you are Same format as "PLIST" (See above). REMOVE Remove one or all aDCC offer packs. RESET Resets all counters and displays, including the status bar. SAVE Saves your offerlist to a file, for later use. SEND Send a file(s) to nick. Wildcards allowed. SETUP Modify the aDCC current settings. STATUS Show the current aDCC configuration. The commands are in majority self-explanatory. The matter of security also applies here, never do a command like: "/ADCC SEND ~/*" which sends all the files in your HOME dir, unless you know what you are doing. See also: [user SETUP] [user DTOG] lice5/help/changelog0000644000175000017500000002355612715251177013050 0ustar timtim*** Changes in version 5.3.0 - 05/13/16 - Added 3 more startup ANSI's from old LiCe versions! - Fixed /WALL not working correctly. - Fixed /SENS M not being saved. - Fixed server queue bug. (MAJOR BUG) - Make /TOG C actually do something. (LiCe4 bug!) - Big cleanup and optimisation of flood routines Documented how they operate in help/flood - Changed the default for "Flood After" to 8 instead of 5. - /NOIG now shows ignore reason and/or timeout if set. - Fixed temporary ignores being written to the database - Ensure ignore reason is written to database - Add bind to add new window to current ^WC - Add QUITS to /CTOG Q - Fixed /KBI (kick, ban, ignore) not working due to $mask changes in epic5. - Fixed error when all /SENS settings were removed. - Code optimisations to database and main routines. - Removed dead and commented out code. - Added /ACCEPT to manage the CallerID (UMODE +g) list - Removed "extra" folder files from stubs files. If you want extra functions, you must load them yourself via .epicrc or manually using /load - Fixed duplicate logs when loading LiCe on top of already running LiCe. - Ensure no away time information is sent when /TOG Q is set - New /MTOG X to disable logging that you were set AutoAWAY - Fixed /mass to work as expected (Same as LiCe4). Reported by brandon - Lots of help file updates and additions of missing commands. *** Changes in version 5.2.7 - 07/15/15 - We now use epic's built in logging function instead of many ON's for the chanlog feature. Log file formats have changed slightly because of this. Timestamp used is /SENS S value. - Moved pre-5.1.0 changes to extra/changelog.legacy - Fixed bug where auto-away could send messages to channels if you were connected to multiple servers. - Auto-away now notifies what servers you were set away on. - There will now only be one entry in your away log when you are automatically set away on multiple servers at the same time. - Added Esc-\ to update lag indicator. - Fixed (really!) the order servers are loaded/saved in so it's always consistant. - Optimised auto-away routine & fixed bug where you wouldn't get set away automatically on servers if you were already away on one. - More optimisations to database routines. - Flood routine and self protect [esc-`] will now use the server side CallerID feature, if your server supports it. (usermode +g) - Reverted /noig to use original LiCe4 code and formatting, updated default ignore types to match LiCe4's - Fixed issue where /MTOG H would change the case of the text to match the auto-reply case. This broke URL's that contained the auto-reply string, if the URL's case was different. Reported by z2e - Fixed /NOIG * not removing entries from the database. - /NOIG now highlights ignores set by /CTOG Q - EPIC5-1.1.11 now minimum recommended version. *** Changes in version 5.2.6 - 04/11/14 - Made window creation faster - Fix for compatibility with EPIC5-1.1.8+ *** Changes in version 5.2.5 - 04/01/13 - Improved handling of /CTOG when you're not in a channel. - /CTOG now works with channel names like '##freebsd'. - Fixed a typo that stopped /DHOP for working. - Tiny fix for the status bar not being drawn correctly on restart of client. - Added AUTO_RECONNECT functionality from 'epic5/script/reconnect'. - Small fix to /HELP. It will no longer leave your PWD in the wrong place. This was causing console window managers like tmux to open new windows in LiCe's help directory regardless of where EPIC was started. - Fixed bug with /CTOG Q not being removed from the database. This caused the channel to be ignored again on restart. - Restored /CTOG Q to ignore the same types that LiCe has historically ignored. - Added "Security" line to whois format in "echoes" theme. - Any binds that temporarily put information in your status bar (like ^Wu for client uptime) would overwrite the correct STATUS_FORMAT if double line status bars were not used. This has been fixed. - Fixed /NOIG formatting when timestamps are enabled. - Fixed /PPL formatting when timestamps are enabled. - Fixed /CTOG T stripping all your channel sets if you entered nothing in the prompt. - /HELP, /NOIG, /PPL, /THEME, /PIC, netsplit list, and the tab completion list now format correctly with any length of timestamp format set by /SENSORS S. - KICK flood detection is now handled exclusively by the ON FLOOD hook which respects /CTOG O & /CTOG V. Thanks Sebek for reporting this. - Fixed masks used by flood protection when banning or adding to shitlist. - Removed /CTOG 2 (banning cycle dorks). JOIN/PART floods are still handled by LiCe's standard flood protection. *** Changes in version 5.2.4 - 08/14/12 - Fixed issue with /TOG Q, LiCe information was still being returned if you were CTCP VERSION'd. Thanks whitefang for reporting. - /SENS S now accepts spaces. Reported by Q. - Fixed bug with /HELP reported by whitefang. - Documentation cleanups and fixes. - You can disable the channel cache sync check by setting /SENS C to 0. This has been a problem for some users joining and then parting channels, though the ideal fix is to set the /SENS C to a higher figure (say, 30) *** Changes in version 5.2.3 - 05/18/12 - Optimised restoring the database on LiCe load - Much faster. - Fixed database routine to ensure only valid data is written to database when using /SET - Updated /CHANST to support halfop. - Lots of help file documentation updates. - Fixed some ^W binds not working if using a single status line. - /MSAY and /MME now support sending to all channels on all connected servers. - Fixed problems with /NOTE not working correctly. - Fixed /PAGER - Added lice.database to extra directory. You can view/edit your LiCe 5.2.0+ database using this script. *** Changes in version 5.2.2 - LiCe HalfOP Release! - 05/12/12 - Added support for the display of halfop status on join and to SC, CWHO, PPL and MASS. - Added /HOP and /DHOP plus documentation. - Updated most themes to support +h count in /SC footer. - Corrected theme bug causing some functions being called twice. - You can now install *.reason files in your .lice directory. If they're found, they will be used instead of the supplied ones in the lice install directory. Useful for global installs, allows each user to customise their gone/back/quit etc reason files individually. - Fixed bug where /UPDATE would still trigger even if the disable_update file existed. Thanks Q for reporting. - Fixes to many themes to fix blank lines on /WHOIS & /WHOWAS Reported by Q - Bug fixes to /SILENCE & added documentation for SILENCE to the user help. - Fixed /GONE -a not setting a message. - Enhanced /BACK to support -a, returning you to all connected servers. - /HELP no longer cares about case. *** Changes in version 5.2.1 - 04/30/12 - Fixed cleanup routines not being called when leaving a channel. - Updates to QuickStart guide and other help files. - We now instantly remove servers from database when deleted. - Small fix to /CTOG when not on a channel. *** Changes in version 5.2.0 - 04/25/12 - *MAJOR* changes have been made to LiCe! Please read these notes carefully. - /SAVE is no longer required. All settings are written to a database now in realtime. By default this is ~/.lice but you can override this with the IRCSAVE environment variable. - LiCe can be installed anywhere now. No longer is .irc used, this means that old settings _will not_ be migrated. Sorry! This also supports system-wide installs, please see GLOBAL in the help directory for more information. - Added QUITS and removed CTCPs from /CTOG Q - Fixed the friend !UNBAN command. A side-effect is that /sb no longer shows "extra" info. Use the -f flag to see details. - Fixed /TOG X when used on multiple servers. - Fixed /PPL to accept a channel argument as detailed in the help file. - Fixed /PPL breaking /WHO for the current chan. - Servers are now saved correctly (and automatically) - Other small fixes for reported issues. - CTOG Q no longer quiets topic changes. Doing so breaks topic update notifications! - Fixed /WTOG T to properly show topics with double quotes in them. - Fixed names display if /MTOG V isn't turned on. - This release will probably have bugs! Please report them! *** Changes in version 5.1.2 - Fixed stupid bug if you enabled/disabled /MTOG E *** Changes in version 5.1.1 - If /MTOG E is enabled, messages are written to disk in encoded format. This IS NOT encypted and is *simple* to decode. It only stops casual glances or text searches. - Heavily optimised MTOG E disk writes and initial messages load. This changes the save format. If you see oddness just /ERASE - Couple of small changes that HSOC noted. Thanks, HSOC. - Fixed mistakes in armitage theme. Reported by cripy_ - Added getting started help guide. /HELP QuickStart *** Changes in version 5.1.0 - Dropped the m from the version. No one else is developing LiCe, this is as official as it gets. - Update fixed! /UPDATE downloads files and gives you any important messages. This was all SrfRoG's work. I've just enhanced it a bit. - Fixed operview/messageview windows not showing reverse status lines. - Removed sping.gz from help/user, updated symlink & alias for the /RLAG command. - Added input prompt to bitchx theme. - Improved the wget routine to ensure that a fresh copy is always requested. This means if you're behind a cache you won't get stale news when you /UPDATE - Fixed problem where you got two messages logged in away log on public flood. - Fixed mask used on public flood. No longer as insane. - Implemented /MTOG E. When on, anything in your away log is also written to disk. This protects you against client crash/kill. As soon as you disable it the log file is deleted. When you enable it, any messages in the away log are saved to it. lice5/userhelp/0000755000175000017500000000000012715251177012062 5ustar timtimlice5/userhelp/UNBAN0000644000175000017500000000026012715251177012646 0ustar timtim!UNBAN  This will make me unban you from a channel (if I'm on that channel and have ops). You must have UNBAN access to this channel, of course. lice5/userhelp/VOICE0000644000175000017500000000033412715251177012652 0ustar timtim!VOICE [channel] This will tell me to voice you on any channel where I can. If you give a channel name, I'll just voice you on that channel. You must have VOICE access on these channels, of course. lice5/userhelp/PASS0000644000175000017500000000024312715251177012552 0ustar timtim!PASS  This sets a password, which lets you use other commands, like IDENT. !PASS  This is how you change your password. lice5/userhelp/IDENT0000644000175000017500000000041512715251177012650 0ustar timtim!IDENT [handle] This lets me recognize you from a new address. You must use your password (the one you set with PASS) so I know it's really you. If you're using a different nickname than your original handle, you must provide the handle too. lice5/userhelp/OP0000644000175000017500000000034712715251177012327 0ustar timtim!OP [channel] This will tell me to op you on any channel where I have ops and you don't. If you give a channel name, I'll just op you on that channel. You must have OP access on these channels, of course. lice5/userhelp/CHAT0000644000175000017500000000020112715251177012515 0ustar timtim!CHAT  This makes me DCC CHAT you. That way you can access the partyline or fileserver if they are available. lice5/userhelp/WHOAMI0000644000175000017500000000024612715251177012773 0ustar timtim!WHOAMI  This will give you information about your registered hostnames and channels. Also, will display your access and info for each channel. lice5/userhelp/INVITE0000644000175000017500000000031312715251177013000 0ustar timtim!INVITE  This will make me invite you to a channel (if I'm on that channel and it's possible for me to invite you). You must have INVITE access to this channel, of course. lice5/lice.irc0000644000175000017500000015301112715251177011647 0ustar timtim# LiCe5 - srfrog's LiCe4 ported and enhanced for epic5 by tjh [tim@muppetz.com] and whitefang # Homepage: https://lice.muppetz.com/ # git: https://github.com/tjbh/lice # # Version: 5.3.0 # Released: 05/13/16 # # IRCII Script Program. For use with ircii-EPIC5 clients. # Copyright (C) 1993-2000 SrfRoG (cag@codehack.com) # Copyright (C) 2008-2015 tjh (tim@muppetz.com) # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. # # -------------------------------------------------------------------------------------- # All code by SrfRoG, tjh and whitefang UNLESS specified. Visit https://lice.muppetz.com # -------------------------------------------------------------------------------------- IF (word(2 $loadinfo()) != [pf]) {LOAD -pf $word(1 $loadinfo());RETURN}; # warning to people who dare use lame clients. EVAL IF (word(0 $info(v)) != [epic5] || V < 20140711 || info(i) < 1810) { CLEAR; ECHO; ECHO The LiCe5 script needs the latest ircii-EPIC5 client, else it won't; ECHO work as intended. Tell your administrator to upgrade your client, or; ECHO you can obtain a copy of the source and compile it for yourself from:; ECHO; ECHO http://ftp.epicsol.org/pub/epic/EPIC5-PRODUCTION/; ECHO; ECHO EPIC5 1.1.11 is the minimum recommended version for LiCe5, though any; ECHO version of EPIC5 will work. Bugs reported on earlier versions will; ECHO be ignored though! You've been warned....; ECHO; IF (word(0 $info(v)) == [epic5]) { ECHO You are using $word(0 $info(v)) release:$V commit_id:#$info(i); ECHO You should have EPIC5 release:20140711 commit_id:#1810 [EPIC5-1.1.11] or greater; }; IF (word(0 $info(v)) != [epic5]) { ECHO You need EPIC5! You have $word(0 $info(v)) ! Bye...; RETURN; }; ECHO Pausing 5 seconds...; PAUSE 5; }; # Make sure there's nothing else loaded. FE ($logctl(REFNUMS ALL)) logs {//^LOG $logs KILL}; //^DUMP ALL; PACKAGE LiCe; # idea by anduril (wd) ^ASSIGN bench.stime $utime(); # savefile location ^ASSIGN lice.save_path $getenv(IRCSAVE); UNLESS (strlen($lice.save_path)) {^ASSIGN lice.save_path $twiddle(~/.lice)}; # global defaults @ temp.nrm = numitems(AM); ^ASSIGN temp.dcc_active 0; ^ASSIGN temp.mode_list.User AFEGIOPRUV; ^ASSIGN temp.mode_list.Shit ABCDEFHKNU; # locate install path ^ASSIGN LiCePath $before(-1 / $word(1 $loadinfo())); # lice.epic5 imports builtins from epic4 for epic5 - backwards compatability LOAD -pf $LiCePath/lice/lice.epic5; # database engine LOAD -pf $LiCePath/lice/lice.db; # check to disable update IF (fexist($(LiCePath)/disable_update) == 1) {@ dlu = 1}; # setup some sane defaults. LOAD -pf $LiCePath/lice/lice.defaults; # load the default theme. LOAD $LiCePath/themes/default; # program information ^ASSIGN id.v $decode(DFCODDCODA); ALIAS lice (addon) { @ :ret = []; SWITCH ($addon) { () { @ :ret = decode(ACEMGJEDGFAC) ## [ v] ## id.v; @ :ret #= strlen($id.m) ? [ ] ## id.m : []; }; (+sv) { @ :ret = decode(ACEMGJEDGFAC) ## [ v] ## id.v; @ :ret #= (lice.get(main.theme) == [default]) ? [] : [ \(] ## lice.get(main.theme) ## [\)]; @ :ret #= strlen($id.m) ? [ ] ## id.m : []; }; (-sv) { ^ASSIGN -id.m; UNLESS (isset(Q)) {^SET CLIENT_INFORMATION $lice()}; }; (*) { PUSH id.m ${(substr("${addon}" $id.m) == -1) ? [+ ] ## addon : []}; UNLESS (isset(Q)) {^SET CLIENT_INFORMATION $lice()}; }; }; @ FUNCTION_RETURN = ret; }; # display random LiCe logo EVAL LOAD $LiCePath/logos/lice.logo${rand($numwords($glob($LiCePath/logos/*)))+1}; ### ONs ON ^DCC_RAW * #; ON ^301 * { IF (temp.whois_away > 0) { ECHO $fmt.whois_mid(Away $1-); }{ IF (findw($0 $servernick($servernum()) $tabnick[$servernum()]) == -1) {XECHO -B $0 is away: $1-}; }; }; ON #-305 13 * { @ :serv = serverctl(FROM_SERVER); IF (gone_away[$serv] > 0) {iecho You were gone for $tdiff(${time() - gone_away[$serv]})}; IF (temp.nrm > 0) {iecho You have $temp.nrm message$plural($temp.nrm) waiting}; ^ASSIGN -gone_away[$serv]; }; ON #-306 13 * { @ :serv = serverctl(FROM_SERVER); UNLESS (gone_away[$serv]) {@ gone_away[$serv] = time()}; IF (ismset(M)) {iecho Saving all incoming messages...}; ^SET STATUS_USER1 $temp.nrm; IF (!quiet_test[$serv] && !ismset(Q) && servername($winserv()) == S) {DESCRIBE ${C?C:T?T:N} is gone. $A}; ^ASSIGN -quiet_test[$serv]; }; ON ^275 * {ECHO $fmt.whois_mid(Security $1-)}; ON ^276 * {ECHO $fmt.whois_mid(Notice $1-)}; ON ^307 * {ECHO $fmt.whois_mid(Services $1-)}; ON ^308 * {ECHO $fmt.whois_mid(Server $1-)}; ON ^309 * {ECHO $fmt.whois_mid(Services $1-)}; ON ^310 * {ECHO $fmt.whois_mid(Helper $1-)}; ON ^338 * {ECHO $fmt.whois_mid(Spoof Real Host for $1 is $2)}; ON ^311 * {_proc.on_whois Whois $1-}; ON ^312 * { IF (pattern([*.*] $2)) { IF (strlen($3)) { ECHO $fmt.whois_mid(Server $2 [$3-]); ECHO $fmt.whois_mid(Server Uplink $1 -> $strip([] $2)); }{ ECHO $fmt.whois_mid(Server $1 [Uplink $strip([] $2)]); }; }{ ECHO $fmt.whois_mid(Server $2 [$3-]); }; }; ON ^313 * {ECHO $fmt.whois_mid(Operator $1-)}; ON ^314 * {_proc.on_whois Whowas $1-}; ON ^317 * { IF (isnumber($3)) {ECHO $fmt.whois_mid(Signon $strftime($3 %c))}; ECHO $fmt.whois_mid(Idle $tdiff($2)); }; ON ^318 * { IF (temp.whois_away > 0) { @temp.whois_away--; IF (ismset(O)) {_proc.note_wget $1}; IF (aliasctl(ALIAS EXISTS fmt.whois_bot)) {ECHO $fmt.whois_bot(Whois $*)}; }; }; ON ^319 * {ECHO $fmt.whois_mid(Channels $2-)}; ON ^328 * {XECHO -W $chanwin($1) $fmt.banner_chan() URL for $1\: $2-}; ON ^330 * {ECHO $fmt.whois_mid(Identity $1 $3- $2)}; ON ^331 * { @ :win = chanwin($1); XECHO -W $win $fmt.banner_chan() $fmt.topic_set($1 No Topic Set); UNLESS (win == -1) { @ :hash = hash_32bit($1); @ chan_topic[$win$hash] = [$1 No Topic Set]; IF (iscurchan($1) && iswset(T)) {@windowctl(SET $win TOPLINE 1 -- LiCe Titlebar [tm] --)}; }; }; ON ^332 * { @ :win = chanwin($1); XECHO -W $win $fmt.banner_chan() $fmt.topic_set($1-); UNLESS (win == -1) { @ :hash = hash_32bit($1); @ chan_topic[$win$hash] = [$1-]; IF (iscurchan($1) && iswset(T)) {@windowctl(SET $win TOPLINE 1 $fmt.titlebar($chan_topic[$win$hash]))}; }; }; ON ^333 * {XECHO -W $chanwin($1) $fmt.banner_chan() $fmt.topic_set($1 Set by $2 on $strftime($3 %c))}; ON ^335 * {ECHO $fmt.whois_mid(Bot $2-)}; ON #-351 13 * { XECHO -B $info(C); XECHO -B System: $uname(%a); XECHO -B Script: $decode(BPFDHCGGFCGPEHBPCHHDCAACEMGJEDGFAC) v$id.v : cag@codehack.com / hsoc@irc.gr / tim@muppetz.com; IF (strlen($id.m)) {XECHO -B Add-Ons: $rest(2 $id.m)}; XECHO -B Uptime: $tdiff(${time() - F}) \(PID $pid()\); }; ON ^364 * { UNLESS (temp.link) { @ temp.link = 1; ECHO $fmt.banner_server() ----- Hops Server ------------------------- Uplink ----------------------; }; ECHO $fmt.banner_server() $pad(3 " " $temp.link) [$[-2]3] [$pad(27 " " $1)] -> [$pad(27 " " $2)]; @ temp.link++; }; ON ^365 * {^ASSIGN -temp.link}; ON ^366 * #; ALIAS _proc.display_list (name,chan,item,who,when) { @ :serv = servernum(); IF (onchannel($servernick() $chan)) { @ :list = left(1 $name) ## serv; @ :hash = hash_32bit($chan); IF (matchitem($list\-$hash *$item*) < 0) {@ setitem($list\-$hash $numitems($list\-$hash) $item)}; IF (list_mutex[$list$hash]) {RETURN}; }; UNLESS (temp[$name]) { @ temp[$name] = 1; cecho ---------- Channel $ch($chan) ${name}list ----------; }; IF (strlen($who)) { cecho $pad(2 " " $temp[$name]) $strftime($when %b%d %X) $item \(by ${ismset(V) ? who : pass(! $who) ? before(! $who) : who}\); }{ cecho $pad(2 " " $temp[$name]) $item; }; @ temp[$name]++; }; ON ^346 * {_proc.display_list Inv $1-}; ON ^347 * { ^ASSIGN -temp.Inv; ^ASSIGN -list_mutex[I$servernum()$hash_32bit($1)]; }; ON ^348 * {_proc.display_list Exc $1-}; ON ^349 * { ^ASSIGN -temp.Exc; ^ASSIGN -list_mutex[E$servernum()$hash_32bit($1)]; }; ON ^367 * {_proc.display_list Ban $1-}; ON ^368 * { ^ASSIGN -temp.Ban; ^ASSIGN -list_mutex[B$servernum()$hash_32bit($2)]; }; ON ^369 * { IF (temp.whois_away > 0) { @ temp.whois_away--; IF (ismset(O)) {_proc.note_wget $1}; IF (aliasctl(ALIAS EXISTS fmt.whois_bot)) {ECHO $fmt.whois_bot(Whowas $*);}; }; }; ON ^378 * {ECHO $fmt.whois_mid(Security $1 is really $5 [$6])}; ON ^671 * {ECHO $fmt.whois_mid(Security $1-)}; ON #-TOPIC -13 * { @ :hash = hash_32bit($1); @ :nick = servernick($servernum()); UNLESS ([$0] == nick) { @ :mode = ischanop($nick $1) ? get_cookie(User $1 $0 $hash) : 0; IF (iscset(T $hash) && !(mode & 4) && strlen($lice.get(chan[$hash][T])) && [$2-] != lice.get(chan[$hash][T])) {QUOTE TOPIC $1 :$lice.get(chan[$hash][T])}; }{ IF (iscset(T $hash)) {@lice.set(chan[$hash][T] $2-)}; }; }; ON #-SEND_MSG 13 * {_proc.tab_add $winserv() $0}; ON #-SEND_NOTICE 13 * {_proc.tab_add $winserv() $0}; ON #-SEND_DCC_CHAT 13 * {_proc.tab_add $winserv() =$0}; ON #-ACTION 13 * { UNLESS (ischannel($1)) { IF (ismset(A)) {_proc.away_save $0 $userhost() [action:$1] * $0 $2-}; _proc.tab_add $servernum() $0; }; }; ON #-DCC_CHAT 13 * { _proc.tab_add $winserv() =$0; IF (ismset(C)) {_proc.away_save $0 licelogd [CHAT] $1-}; }; ON #-CONNECT 13 * { IF (ismset(V)) {_proc.away_save LiCe licelogd Connected to $0 [$2]}; IF (strlen($lice.get(main.umode))) {^TIMER 1 {MODE $servernick() $lice.get(main.umode)}}; }; ON #-DISCONNECT 13 * { IF (ismset(U)) {_proc.away_save LiCe licelogd $*}; UNLESS ([$0]==[Killed]) {//SERVER +}; UNLESS ([$0]!=[Killed] || [$1]!=[Connection]) {//RECONNECT} }; # handle userlist msg commands here. ON ^MSG "% !HELP*" { @ :host = userhost(); IF (!isset(P) || !find_in_list(User $0!$host)) { mecho $fmt.msg($*); RETURN; }; ECHO $fmt.banner_userlist() $fmt.usercmd($0 HELP); ^_proc.ulw_help $0 $host $servernum() $2; }; ON ^MSG "% !IDENT *" { UNLESS (isset(P)) {RETURN}; ECHO $fmt.banner_userlist() $fmt.usercmd($0 IDENT); ^_proc.ulw_ident $0 $userhost() $servernum() $2-; }; ON ^MSG "% !% %*" { @ :host = userhost(); IF (!isset(P) || !find_in_list(User $0!$host)) { mecho $fmt.msg($*); RETURN; }; @ :cmd = toupper($rest(1 $1)); ECHO $fmt.banner_userlist() $fmt.usercmd($0 $cmd); UNLESS (aliasctl(ALIAS EXIST _PROC.ULW_$cmd)) { @ :test = which($LiCePath/lice/lice.ulw_$tolower($cmd)); UNLESS (strlen($test)) {RETURN}; ^LOAD -pf $test; }; ^_proc.ulw_$cmd $0 $host $servernum() $2 $3; }; ## lame /ON NAMES display ALIAS _proc.names_mode (nick) { @ :nic = mid(1 9 $nick); @ :mod = left(1 $nick); IF (mod == [@]) { @ names.o++; } ELSIF (mod == [%]) { @ names.h++; } ELSIF (mod == [+]) { @ names.v++; } ELSE { @ :mod = []; @ :nic = nick; IF (strlen($nick)) {@ names.l++}; }; @ :ret = mod ## nic; RETURN $ret; }; ON -366 * { IF (names.max) { @ :names.t = names.v + names.o + names.h + names.l; IF (aliasctl(ALIAS EXISTS fmt.sc_bot)) {ECHO $fmt.sc_bot($2 $names.o $names.h $names.v $names.l $names.t)}; purge names; }; }; ON ^353 * { IF (iscset(Q $hash_32bit($2))) {RETURN}; UNLESS (names.max) { @ :max = fmt.sc_max() ? fmt.sc_max() : (word(0 $geom()) - 1) / 11; @ :min = ismset(T) ? ((strlen($strftime($lice.get(main.tsfmt))) + 2) / 11) + 1 : 0; @ names.max = max - min; @ names.v = names.o = names.h = names.l = 0; ECHO $fmt.sc_top($2); }; ^LOCAL list $3-; @ :names.list = []; FE ($list) nick { PUSH names.list $_proc.names_mode($nick); IF (numwords($names.list) != names.max) {CONTINUE}; ECHO $fmt.sc_mid($names.list); @ :names.list = []; }; IF (strlen($names.list)) {ECHO $fmt.sc_mid($names.list)}; }; ## ON #-IDLE 13 '\$lice.get(main.agn)' { IF (!lice.get(main.agn) || isset(X)) {RETURN}; FE ($myservers()) server { @ :serv = servernum($server); XEVAL -S $serv { IF (!isaway($serv)) { @ quiet_test[$serv] = 1; @ :server_list = server_list ? server_list ## [, $server] : server; AWAY Gone since $strftime(${time() - (lice.get(main.agn) * 60)} %c); }; }; }; IF (server_list) { XECHO -C $fmt.banner_alert() Auto \($server_list\): Away after $0 minute$plural($0) of inactivity.; IF (ismset(U) && !ismset(X)) {_proc.away_save LiCe licelogd [$server_list] Changed to AWAY status after $0 min$plural($0) of inactivity.}; }; }; ON #-INVITE 13 * { IF (isset(I) || iscset(I $hash_32bit($1))) { JOIN $1; ECHO $fmt.banner_alert() Auto: Join $ch($1) after invite from $0 \($2\); IF (ismset(U)) {_proc.away_save LiCe licelogd Joined $ch($1) after invite from $0 \($2\)}; RETURN; }; IF (ismset(U)) {_proc.away_save LiCe licelogd $0 \($2\) invited you to join $ch($1)}; IF (findw($1 $temp.invite) == -1) { PUSH temp.invite $1; IF (ismset(V)) { XQUOTE -S $servernum() MODE $1; iecho Press "Esc-k" to join invited channel $ch($1); }; }; }; ON #-TIMER -13 * { ^SET STATUS_USER2 ??; @ temp.last_ping = time(); FE ($myservers(null)) server { @ :serv = serverctl(REFNUM $server); UNLESS (serverctl(GET $serv CONNECTED)) {CONTINUE}; @ :nick = serverctl(GET $serv NICKNAME); @ :text = isset(X) ? [PRIVMSG ] ## nick ## [ \:PING ] ## temp.last_ping : [PING ] ## temp.last_ping; XQUOTE -S $serv $text; XEVAL -S $serv { IF ((lice.get(main.auto_nick)) && nick != lice.get(main.auto_nick) && isset(A) && !rmatch($lice.get(main.auto_nick) $notify(on serv $serv))) { ECHO $fmt.banner_alert() Nick $lice.get(main.auto_nick) is now available (AutoNick); NICK $lice.get(main.auto_nick); }; IF (isset(R)) { FE ($mychannels($serv)) chan { IF (!ischanop($nick $chan) && numonchannel($chan) == 1) { leave $chan; WAIT -CMD WINDOW $winchan($chan) CHANNEL "$chan $key($chan)"; }; }; }; }; IF (serv == winserv()) { IF (isaway($serv)) { @ :lame = (gone_away[$serv] ? tdiff2(${temp.last_ping - gone_away[$serv]}) : [??]); ^SET STATUS_USER3 Away: $lame; }{^SET STATUS_USER3 Idle: $tdiff2($E)}; IF (numitems(ALARM) > 0) {_proc.alarm_check $mid(${index(\: $0) + 1} 2 $0)}; STIME; }; }; _proc.purge_lists $temp.last_ping; }; ON #-EXIT 13 * { @lice.set(db.status 0); iecho Time wasted on IRC: $tdiff(${time() - F}); }; # IrcNet is lame. ALIAS _proc.update_lag (sname,then) { IF (winserv() == servernum($sname)) { @ :fix = isnumber($then) ? then : temp.last_ping; @ :lag = time() - fix; ^SET STATUS_USER2 $tdiff2($lag); RETURN; }; UNLESS (sname == temp.last_sping_server) {RETURN}; @ :lag = isnumber($temp.last_sping) ? time() - temp.last_sping : 0; iecho >> $sname latency: $tdiff($lag); ^ASSIGN -temp.last_sping; ^ASSIGN -temp.last_sping_server; }; ON ^PONG * {_proc.update_lag $0 $2}; # major hack... ON ^RAW_IRC '\$servernick($servernum())!% PRIVMSG \$servernick($servernum()) :PING %' {_proc.update_lag $S $4}; ON #^CHANNEL_SIGNOFF -13 * {_proc.cookies_remove $0 $1}; ON #^CHANNEL_NICK -13 * {_proc.cookies_remove $0 $1}; # # Custom Formats # ON ^ACTION * { IF (ischannel($1)) { XECHO -W $chanwin($1) $fmt.action($*); }{ ECHO $fmt.action_me($*); }; }; ON ^CHANNEL_NICK * { XECHO -W $chanwin($0) $fmt.banner_nick() $fmt.channel_nick($*); IF (winnam($1)) { XEVAL -W $1 WINDOW NAME $2 QUERY $2; XECHO -C $fmt.banner_alert() Auto: Switching query nickname $1 to $2; }; IF (match($1 $tabnick[$winserv()]) && ismset(V)) { @ tabnick[$winserv()] = remw($1 $tabnick[$winserv()]); _proc.tab_add $servernum() $2; }; IF ([$1] != servernick()) { @ :hash = hash_32bit($0); IF ((!iscset(C $hash) && !iscset(F $hash)) || (iscset(O $hash) && ischanop($1 $0)) || (iscset(V $hash) && ischanvoice($1 $0))) {RETURN}; @ :mode = get_cookie(User $0 $1 $hash); @ :test = _proc.mass_check($userhost($1) $hash); IF (test && !(mode & 2)) {_proc.flood_chan NICK $2 $userhost($1) $servernum() $0 $hash}; }; }; ON ^CHANNEL_SIGNOFF * { IF (!ismset(V) && iscset(Q $hash_32bit($0))) {RETURN}; XECHO -W $chanwin($0) $fmt.banner_signoff() $fmt.channel_signoff($*); }; ON ^CTCP * { IF (ischannel($1)) { @ :hash = hash_32bit($1); XECHO -W $chanwin($1) $fmt.banner_ctcp() $fmt.ctcp_channel($*); IF ((!iscset(C $hash) && !iscset(F $hash)) || (iscset(O $hash) && ischanop($0 $1)) || (iscset(V $hash) && ischanvoice($0 $1))) {RETURN}; @ :mode = get_cookie(User $1 $0 $hash); @ :test = _proc.mass_check($userhost($0) $hash); IF (test && !(mode & 2)) {_proc.flood_chan CTCP $0 $userhost($0) $servernum() $1 $hash}; }{ ECHO $fmt.banner_ctcp() ${([$1] == servernick($servernum())) ? fmt.ctcp_me($*) : fmt.ctcp_server($*)}; }; }; ON ^DCC_CHAT * {dmecho $fmt.dcc_chat($*)}; ON -GENERAL_NOTICE '% $servernick() *' #; ON ^GENERAL_NOTICE "% @#% *" {mecho $fmt.notice($0 WALLOP:$1 $2-)}; ON ^GENERAL_NOTICE "% %.% *" {mecho $fmt.notice($0 [$1] $2-)}; ON ^INVITE * {ECHO $fmt.banner_invite() $fmt.invite($*)}; ON ^JOIN * {XECHO -W $chanwin($1) $fmt.banner_join() $fmt.join($*)}; ON ^KICK * { XECHO -W $chanwin($2) $fmt.banner_kick() ${([$0] == servernick($servernum())) ? fmt.kick_me($*) : fmt.kick($*)}; }; ON ^MODE * { IF (ischannel($1)) { XECHO -W $chanwin($1) $fmt.banner_mode() $fmt.mode($*); }{ ECHO $fmt.banner_mode() $fmt.mode_me($*); }; }; ON ^PART * {XECHO -W $chanwin($1) $fmt.banner_leave() $fmt.leave($*)}; ON ^MODE "% % %bb *" {XECHO -W $chanwin($1) $fmt.banner_mode() $fmt.mode_bans($*)}; ON ^MODE "*.* #% *" {XECHO -W $chanwin($1) $fmt.banner_mode() $fmt.mode_server($*)}; ON ^MSG * { IF (ismset(I)) { UNLESS (findw($0 $servernick($servernum()) $tabnick[$servernum()]) > -1) { XEVAL -S $servernum() WHOIS $0; }; }; mecho $fmt.msg($*); }; ON ^MSG_GROUP * {mecho $fmt.msg_group($*)}; ON ^NOTICE * {mecho $fmt.notice($*)}; ON ^NOTIFY_SIGNON * { IF ([$0] == [$lice.get(main.auto_nick)] && isset(A)) {RETURN;}; ECHO $fmt.banner_signon() ${(NOTIFY_USERHOST_AUTOMATIC == [ON]) ? fmt.notify_signon_uh($*) : fmt.notify_signon($*)}; }; ON ^NOTIFY_SIGNOFF * {ECHO $fmt.banner_signoff() $fmt.notify_signoff($*)}; ON ^PUBLIC * {XECHO -W $chanwin($1) $fmt.public($*)}; ON ^PUBLIC_MSG * {XECHO -W $chanwin($1) $fmt.public_msg($*)}; ON ^PUBLIC_OTHER * {XECHO -W $chanwin($1) $fmt.public_other($*)}; ON ^PUBLIC_NOTICE * { UNLESS (findw($1 $mychannels() $servernick()) == -1) { mecho $fmt.public_notice($*); }{mecho $fmt.notice_group($*)}; }; ON ^SEND_ACTION * { IF (ischannel($0)) { XECHO -W $chanwin($0) $fmt.send_action($*); }{ ECHO $fmt.send_action_me($*); }; }; ON ^SEND_DCC_CHAT * {dmecho $fmt.send_dcc_chat($*)}; ON ^SEND_MSG * {mecho $fmt.send_msg($*)}; ON ^SEND_NOTICE * {mecho $fmt.send_notice($*)}; ON ^SEND_PUBLIC * {XECHO -W $chanwin($0) $fmt.send_public($*)}; ON ^SERVER_NOTICE * {XECHO -W OV$servernum() $fmt.banner_server() $fmt.server_notice($*)}; ON ^TOPIC * { @ :win = chanwin($1); XECHO -W $win $fmt.banner_chan() $fmt.topic($*); UNLESS (win == -1) { @ :hash = hash_32bit($1); @ chan_topic[$win$hash] = [$1-]; IF (iscurchan($1)) { IF ([$2] == []) { @windowctl(SET $win TOPLINE 1 -- LiCe Titlebar [tm] --); }{ @windowctl(SET $win TOPLINE 1 $fmt.titlebar($chan_topic[$win$hash])); }; }; }; }; ON ^WALLOP * { IF ([$1] == [*]) { mecho $fmt.wallop($*); }{ XECHO -W OV$servernum() $fmt.banner_server() $fmt.wallop_server($*); }; }; ### Synch check funtion (Orig. by SrfRoG) ALIAS _proc_synch { IF ([$0] != S) { uecho Desynch@$0 \- $1-; }{uecho $1\: $2-}; }; ON ^404 * {_proc_synch $0-}; ON ^442 * {_proc_synch $0-}; ON ^482 * {_proc_synch $0-}; ### ON ^405 * {ECHO $fmt.banner_alert() $fmt.cant_join($1 You're in too many channels);}; ON ^432 * {ECHO $fmt.banner_alert() $1-;}; ON ^437 * {ECHO $fmt.banner_alert() $fmt.cant_join($1 Temporarily unavailable / Banned NICK change);}; ON ^471 * {ECHO $fmt.banner_alert() $fmt.cant_join($1 It's full);}; ON ^473 * {ECHO $fmt.banner_alert() $fmt.cant_join($1 An invite is required);}; ON ^474 * {ECHO $fmt.banner_alert() $fmt.cant_join($1 You're banned);}; ON ^475 * {ECHO $fmt.banner_alert() $fmt.cant_join($1 A key is required);}; ON ^476 * {ECHO $fmt.banner_alert() $fmt.cant_join($1 Bad channel name);}; ON ^477 * {ECHO $fmt.banner_alert() $fmt.cant_join($1 Only registered nicks allowed);}; ON ^478 * { IF (ischanop($servernick() $1)) {//MODE $1 +i}; ECHO $fmt.banner_alert() $toupper($1) $2-; }; ### END ONs ### Small commands ALIAS sv {//MSG ${@?[$0]:C} $J \($info(r)\) + $lice(+sv)}; ALIAS umode {//MODE $servernick() $*}; ALIAS ww {//WHOWAS $*}; ALIAS wi {//WHOIS $*}; ALIAS wii {//WHOIS $0 $0}; ALIAS re {//REDIRECT $*}; ALIAS rlag { IF (@) { ^ASSIGN temp.last_sping_server $0; @ temp.last_sping = time(); QUOTE PING $S $temp.last_sping_server; RETURN; }; ^SET STATUS_USER2 ??; @ temp.last_ping = time(); XQUOTE -S $winserv() PING $temp.last_ping; }; ALIAS sping {rlag $*}; ALIAS rex {IF (strlen($1)) {EXEC -msg $*}{uecho Usage: /REX [arguments]}}; ALIAS ex {EXEC}; ALIAS c { SWITCH ($0) { (-c) {//MODE $C -$chanmode($C)}; (-k) {//MODE $C -k $key($C)}; (-1) {//MODE $C +inst-lmpmk $key($C)}; (-2) {//MODE $C +nst-ilmkpm $key($C)}; (-3) {//MODE $C +nt-ilmkspm $key($C)}; () (*) {//MODE $C $*}; }; }; ALIAS m {//MSG $*}; ALIAS n {//NOTICE $*}; ALIAS j { SWITCH ($0) { () {IF (I) {//JOIN -I}{//JOIN};}; (-*) {//JOIN $*}; (*) {IF (ischannel($0)) {//JOIN $*}{//JOIN #$*};}; }; }; ALIAS join {j $*}; ALIAS leave { @ :serv = servernum(); SWITCH ($0) { () { _proc.channel_remove $serv $C; //PART *; }; (-a) { FE ($mychannels()) chan {_proc.channel_remove $serv $chan}; //JOIN 0; }; (*) {IF (ischannel($0)) { _proc.channel_remove $serv $0; //PART $*; }{ _proc.channel_remove $serv #$0; //PART #$*; };}; }; }; ALIAS l {leave $*}; ALIAS part {leave $*}; ALIAS cycle { @ :c.ch = @ ? (ischannel($0) ? [$0] : [#$0]) : C; UNLESS (rmatch($c.ch $mychannels()) == 0) { leave $c.ch; WAIT -CMD //JOIN $c.ch $key($c.ch); }{//JOIN $c.ch;}; }; ALIAS chg { leave; IF (@) {WAIT -CMD JOIN $0-}; }; ALIAS w { SWITCH ($0) { () {//WHO *}; (-*) {//WHO $0 * $1-}; (*) {//WHO $*}; }; }; ALIAS topic IF (ischannel($0)) {//TOPIC $*;}{//TOPIC $C $*}; ALIAS t { IF (ischannel($0)) { IF (strlen($1) || !strlen($chan_topic[$chanwin($0)$hash_32bit($0)])) { //TOPIC $*; }{ XECHO -W $chanwin($0) $fmt.banner_chan() $fmt.topic_set($chan_topic[$chanwin($0)$hash_32bit($0)])}; }{ IF (strlen($0) || !strlen($chan_topic[$chanwin($C)$hash_32bit($C)])) { //TOPIC $C $*; }{ XECHO -W $chanwin($C) $fmt.banner_chan() $fmt.topic_set($chan_topic[$chanwin($C)$hash_32bit($C)])}; }; }; ALIAS offers {//CTCP ${@?[$0]:C} XDCC LIST}; ALIAS ver {//CTCP ${@?[$0]:C} VERSION}; ALIAS ping {//PING ${@?[$0]:C}}; ALIAS p {ping $*}; ALIAS chat { @ :who = @ ? [$0] : queue.head(DQCHAT); IF (strlen($who)) { FE ($myservers()) name { @ :serv = servernum($name); IF (isconnected($serv)) {_proc.tab_add $serv =$who}; }; DCC CHAT $who; }; }; ALIAS nochat {//DCC CLOSE CHAT $0}; ALIAS dop { ^ASSIGN mode_list $*; _proc.loop_mode $winserv() - o $C mode_list; }; ALIAS op { ^ASSIGN mode_list $*; _proc.loop_mode $winserv() + o $C mode_list; }; ALIAS dhop { ^ASSIGN mode_list $*; _proc.loop_mode $winserv() - h $C mode_list; }; ALIAS hop { ^ASSIGN mode_list $*; _proc.loop_mode $winserv() + h $C mode_list; }; ALIAS reop { ^ASSIGN mode_list $remw($N $chops($C)) $*; _proc.loop_mode $winserv() + o $C mode_list; }; ALIAS voice { ^ASSIGN mode_list $*; _proc.loop_mode $winserv() + v $C mode_list; }; ALIAS quiet { ^ASSIGN mode_list $*; _proc.loop_mode $winserv() - v $C mode_list; }; ALIAS ar { IF (@) {@lice.set(main.buf $*)}; IF (lice.get(main.buf)) { iecho Auto-reply buffer activates on word$plural($numwords($lice.get(main.buf))) matching $lice.get(main.buf); }{ iecho Auto-reply buffer is empty; }; }; ALIAS rar { IF (lice.get(main.buf)) { iecho Removed $lice.get(main.buf) from your auto-reply buffer; @lice.del(main.buf); }{ iecho Auto-reply buffer is empty; }; }; ALIAS stime { @ :it.hr = strftime(%H) - left(3 $strftime(%z)) - 1; @ :it.rhr = (it.hr >= 24) ? it.hr - 24 : (it.hr < 0) ? it.hr + 24 : it.hr; @ :it.ts = (it.rhr * 3600) + (strftime(%M) * 60) + strftime(%S); ^SET FLOATING_POINT_MATH ON; @ :it.tot = (it.ts * 1000) / 86400; ^SET FLOATING_POINT_MATH OFF; @ uni.time = before(. $it.tot\.); }; ALIAS itime {iecho Swatch Internet Time is currently @$uni.time beats.}; ALIAS sbar {iecho Your current MAIN-togs are set to\: \"$lice.get(main.set)\"}; ALIAS mbar {iecho Your current MSG-togs are set to\: \"$lice.get(main.mset)\"}; ALIAS dbar {iecho Your current DCC-togs are set to\: \"$lice.get(main.dset)\"}; ALIAS wbar {iecho Your current WIN-togs are set to\: \"$lice.get(main.wset)\"}; ALIAS hold SET HOLD_MODE TOGGLE; ALIAS log SET LOG TOGGLE; ALIAS beep SET BEEP TOGGLE; ALIAS ansi SET DISPLAY_ANSI TOGGLE; ### END Small commands # TABREPLY - Fast message replier. ALIAS _proc.tab_add (serv,nick) { IF (serv < 0) {RETURN;}; @ :text = remw($nick $tabnick[$serv]); @ tabnick[$serv] = nick ## [ ] ## leftw(7 $text); }; # Assign purge (Orig. by Daemon) ALIAS purge { FOREACH $0 _purge {purge $0.$_purge}; ^ASSIGN -$0; }; # # STACK functions ALIAS queue.add { WHILE (numitems($0) >= [$1]) {@ delitem($0 0)}; @ FUNCTION_RETURN = setitem($0 $numitems($0) $2-); }; ALIAS queue.head { @ FUNCTION_RETURN = getitem($0 0); @ delitem($0 0); }; ALIAS queue.tail { @ :q_tail = numitems($0) - 1; @ FUNCTION_RETURN = getitem($0 $q_tail); @ delitem($0 $q_tail); }; ALIAS makeban { SWITCH ($0) { (BN) (B) {@ :ban = mask(1 $1)}; (BA) {@ :ban = mask(1 $before(@ $1)\@$nametoip($after(@ $1)))}; (BC) {@ :ban = [*!*@*] ## rest($rindex(. $1) $1)}; (BF) {@ :ban = mask(10 $1)}; (BG) {@ :ban = mask(3 $1)}; (BH) {@ :ban = mask(2 $1)}; (BI) {@ :ban = mask(4 $before(@ $1)\@$nametoip($after(@ $1)))}; (BP) {@ :ban = mask(4 $1)}; (BS) {@ :ban = mask(4 $1)}; (BU) { @ :uhm = pass(! $1) ? word(1 $split(!@ $1)) ##[@*] : before(@ $1) ##[@*]; @ :ban = mask(1 $uhm); }; (*) {@ :ban = mask(1 $0)}; }; RETURN $ban; }; # # Whois/Whowas wrapper @ temp.whois_away = 0; ALIAS _proc.on_whois { @ temp.whois_away++; ECHO $fmt.whois_top($0-3); ECHO $fmt.whois_mid(Ircname $5-); IF (isdigit($right(1 $3))) { IF (isset(H)) {dns $3}; }{ IF (isset(T)) {whoiz $3;dom $3}; }; FE ($getarrays()) lista { IF (left(4 $lista) == [USER] || left(4 $lista) == [SHIT]) { @ :hand = (getrmatches($lista $1!$2@$3) >= 0 && isdigit($rest(4 $lista))) ? rest(4 $lista) : []; }; IF (strlen($hand)) { @ :ulista = left(4 $lista) == [USER] ? [Userlist] : [Shitlist]; #FOR (@:cnt=0, numitems($ulista) > cnt, @ :cnt++) { FE ($jot(0 ${numitems($ulista)-1})) cnt { @ :handle = getitem($ulista $cnt); IF (hash_32bit($handle) == hand) { @ :this #= [$handle ]; BREAK; }; }; }; }; IF (strlen($this)) {ECHO $fmt.whois_mid($ulista handle$plural($numwords($this)) \" $this\")}; }; # END Whois/Whowas wrapper ### format aliases ALIAS mecho { IF (winnum(MW) != -1) { XECHO -W MW $*; }{ XECHO $*; }; }; ALIAS dmecho { IF (winnum(CW) != -1) { XECHO -W CW $*; }{ XECHO $*; }; }; ALIAS uecho { ECHO $fmt.banner_usage() $*; }; ALIAS iecho { ECHO $fmt.banner_info() $*; }; ALIAS cecho { ECHO $fmt.banner_chan() $*; }; ALIAS echo.recursive { @ :_w = word(0 $geom()) - (ismset(T) ? strlen($lice.get(main.tsfmt)) + 3 : 0); @ :words_per_line = _w / 11; FE ($*) _x { @ :total++; @ :cnt++; IF (output) {@ :output #= [ $[10]_x]}{@ :output = [$[10]_x]}; IF (cnt == words_per_line || numwords($*) == total) { ECHO $output; @ :cnt = []; @ :output = []; }; }; }; ALIAS plural {@ FUNCTION_RETURN = ([$0] == 1) ? [] : [s]}; ALIAS ch {RETURN $left($CHANNEL_NAME_WIDTH $0)}; ALIAS uh {@ FUNCTION_RETURN = ismset(V) ? [$0!] ## userhost() : [$0]}; ALIAS ts {@ FUNCTION_RETURN = ismset(T) ? [\[] ## strftime($lice.get(main.tsfmt)) ## [\] ] : []}; ALIAS isset {@ FUNCTION_RETURN = !!pass($0 $lice.get(main.set))}; ALIAS iscset {@ FUNCTION_RETURN = !!pass($0 $lice.get(chan[$1][S]))}; ALIAS ismset {@ FUNCTION_RETURN = !!pass($0 $lice.get(main.mset))}; ALIAS iswset {@ FUNCTION_RETURN = !!pass($0 $lice.get(main.wset))}; ALIAS isdset {@ FUNCTION_RETURN = !!pass($0 $lice.get(main.dset))}; ALIAS isset.show {@ FUNCTION_RETURN = ([$0]) ? [On] : [Off]}; ### END format aliases ### Flood protection ON #^FLOOD -13 * { @ :serv = servernum(); @ :host = userhost(); IF (ischannel($2)) { @ :hash = hash_32bit($2); IF (!isset(C) || (!iscset(C $hash) && !iscset(F $hash)) || (iscset(O $hash) && ischanop($0 $2)) || (iscset(V $hash) && ischanvoice($0 $2))) {RETURN}; @ :mode = get_cookie(User $2 $0 $hash); IF (mode & 2) {RETURN}; _proc.flood_chan $1 $0 $host $serv $2 $hash; }{ IF (isset(F) && strlen($host)) { _proc.flood_nick $1 $0 $host $serv; }; }; }; ### END Flood protection # cleans up expired lists ALIAS _proc.purge_lists (now) { FOR (@:x1=0, numitems(NSL) > x1, @:x1++) { @ :x2 = word(2 $getitem(NSL $x1)); IF ((now - x2) > (lice.get(main.nst) * 60)) {@ delitem(NSL $x1)}; }; FOR (@:x1=0, numitems(AUTOUNBAN) > x1, @:x1++) { @ :x2 = getitem(AUTOUNBAN $x1); IF (now > word(0 $x2)) { @ :serv = word(1 $x2); @ :chan = word(2 $x2); @ :hash = hash_32bit($chan); @ :patt = word(3 $x2); IF (ischanop($servernick($serv) $chan) && matchitem(B$serv\-$hash *$patt*) > -1) { XEVAL -S $serv { _proc.mode_add $serv $chan -b $patt; _proc.mode_flush $serv $chan; }; }; @ delitem(AUTOUNBAN $x1); }; }; FOREACH mass_lamer x1 { FOREACH mass_lamer.$x1 x2 { @ :x3 = word(0 $mass_lamer[$x1][$x2]); IF ((now - x3) > 60) {^ASSIGN -mass_lamer[$x1][$x2]}; }; }; FOREACH cycle_lamer x1 { FOREACH cycle_lamer.$x1 x2 { @ :x3 = cycle_lamer[$x1][$x2]; IF ((now - x3) > 30) {^ASSIGN -cycle_lamer[$x1][$x2]}; }; }; }; # # gets nicks matching a u@h pattern # $0=channel $1=pattern $2=list ALIAS get_user_match (chan,mask,list) { @ $list = []; FE ($chanusers($chan)) gm.1 { IF (pattern($mask $gm.1!$userhost($gm.1))) {PUSH $list $gm.1}; }; }; # gets user@host for nick ALIAS get_uh (nick) { WAIT FOR { USERHOST $nick -CMD { @ :uh = ([$3] == []) ? [] : [$3@$4]; BLESS; @FUNCTION_RETURN = uh; }; }; }; # ### Mode parsers. ON #-MODE_STRIPPED -13 * { UNLESS (ischannel($1)) {RETURN}; @ :m.serv = servernum(); @ :m.nick = servernick($m.serv); @ oper.test = ischanop($m.nick $1); @ self.test = ([$0] == m.nick); @ :m.x = hash_32bit($1); IF (strlen($3)) { @ :m.h = pass(. $0) ? [SERVER] : userhost($0); ^HOOK MODE$2 $0 $m.h $1 $m.serv $3 $m.x; }{ IF (!self.test && oper.test && iscset(L $m.x)) { @ :mode = get_cookie(User $1 $0 $m.x); UNLESS (mode & 4) { @ :m.m = right(1 $2); IF (left(1 $2) == [+]) { UNLESS (pass($m.m $lice.get(chan[$m.x][L]))) {_proc.mode_add $m.serv $1 -$m.m}; }{ IF (pass($m.m $lice.get(chan[$m.x][L]))) {_proc.mode_add $m.serv $1 +$m.m}; }; }; }; }; _proc.mode_flush $m.serv $1; }; ON #^HOOK -13 "MODE-e *" {@ delitem(E$4\-$6 $finditem(E$4\-$6 $5))}; ON #^HOOK -13 "MODE-I *" {@ delitem(I$4\-$6 $finditem(I$4\-$6 $5))}; ON #^HOOK -13 "MODE-b *" { @ delitem(B$4\-$6 $matchitem(B$4\-$6 *$5*)); IF (!oper.test || self.test || !iscset(B $6)) {RETURN}; @ :mode = find_in_chan(Shit $3 $6 $5); IF (mode & 2) { @ :mode = get_cookie(User $3 $1 $6); UNLESS (mode & 2) { _proc.mode_add $4 $3 +b $5; IF (!isset(Q) && [$2]!=[SERVER]) { _proc.quote_add $4 NOTICE $1 :Sorry [$5] is in my permanent banlist. $randread($main.reason_error); }; }; }; }; ON #^HOOK -13 "MODE+e *" {@ setitem(E$4\-$6 $numitems(E$4\-$6) $5)}; ON #^HOOK -13 "MODE+I *" {@ setitem(I$4\-$6 $numitems(I$4\-$6) $5)}; ON #^HOOK -13 "MODE+b *" { @ setitem(B$4\-$6 $numitems(B$4\-$6) $5); IF (!oper.test || self.test || [$2]==[SERVER]) {RETURN}; @ :m.nick = servernick($4); IF (match($5 $m.nick!$X $m.nick!%@$temp.my_ip_address)) { _proc.mode_add $4 $3 -ob $1 $5; _proc.quote_add $4 KICK $3 $1 :Hey DONT ban $5 asshole! That's *ME*!; XECHO -W $chanwin($3) $fmt.banner_alert() $1 banned you on $ch($3) with \"$5\"; IF (ismset(U)) {_proc.away_save LiCe licelogd [$3] $1 banned you using hostmask $5}; }{ @ :ban.test = 0; IF (iscset(P $6)) { @ :mode = get_cookie(User $3 $1 $6); UNLESS (mode & 4) { @ :mode = find_in_chan(User $3 $6 $5); IF (mode & 320) { @ :ban.test = 1; _proc.mode_add $4 $3 -b $5; }; IF (mode & 128) { @ :ban.test = 1; IF (ischanop($1 $3)) {_proc.mode_add $4 $3 -o $1}; _proc.mode_add $4 $3 +b $mask(11 $2); UNLESS (isset(Q)) { _proc.quote_add $4 NOTICE $1 :Ban $5: $randread($main.reason_revenge); }; }; }; }; IF (!ban.test && iscset(D $6)) { get_user_match $3 $5 mk_list; IF (strlen($mk_list)) { @ mk_reason = [[Banned] $5]; _proc.loop_kick $4 $3 mk_list mk_reason; }; }; get_user_match $3 $5 ec_list; IF (#ec_list > 1) { XECHO -W $chanwin($3) $fmt.banner_alert() Alert: $5 banned $#ec_list${ismset(V) ? [\: $ec_list] : []}; }; }; }; ON #^HOOK -13 "MODE-v *" { IF (!oper.test || self.test || [$2]==[SERVER]) {RETURN}; #flood_check DEOP $2 $1 $3 $m.serv; IF ([$1]!=[$5] && iscset(P $6)) { @ :mode = get_cookie(User $3 $1 $6); UNLESS (mode & 4) { @ :mode = get_cookie(User $3 $5 $6); IF ((mode & 544) == 544) {_proc.mode_add $4 $3 +v $5}; IF (mode & 128) { _proc.mode_add $4 $3 -o $1; UNLESS (isset(Q)) { _proc.quote_add $4 NOTICE $1 :QUIET $5: $randread($main.reason_revenge); }; }; }; }; }; ON #^HOOK -13 "MODE-o *" { IF (!oper.test || self.test || [$2]==[SERVER] || [$1]==[$5]) {RETURN}; @ :mode = get_cookie(User $3 $1 $6); @ :test = _proc.mass_check($2 $6); IF (test && !(mode & 2) && (iscset(C $6) || iscset(F $6))) {_proc.flood_chan DEOP $1 $2 $4 $3 $6}; IF (iscset(P $6) && !(mode & 4)) { @ :mode = get_cookie(User $3 $5 $6); IF ((mode & 128) && !test) { _proc.mode_add $4 $3 -o $1; UNLESS (isset(Q)) { _proc.quote_add $4 NOTICE $1 :DEOP $5: $randread($main.reason_revenge); }; }; IF ((mode & 96) == 96) {_proc.mode_add $4 $3 +o $5}; }; IF (servernick($4) == [$5] && ismset(U)) { _proc.away_save LiCe licelogd [$3] $1 \($userhost()\) dared to DEOP you!; }; }; ON #^HOOK -13 "MODE+o *" { IF (!oper.test || self.test) {RETURN}; @ :deop.test = 0; IF ([$2]==[SERVER]) { @ :split = iscset(N $6) ? matchitem(NSL % $3 *@$5*) : 1; IF (split < 0) { @ :mode = get_cookie(User $3 $5 $6); UNLESS ((mode & 32) || iscset(P $6)) { @ :deop_test = 1; _proc.mode_add $4 $3 -o $5; }; }; }{ IF (!self.test && iscset(G $6)) { @ :mode = get_cookie(User $3 $1 $6); UNLESS (mode & 4) { @ :mode = get_cookie(User $3 $5 $6); UNLESS (mode & 32) { @ :deop.test = 1; _proc.mode_add $4 $3 -o $5; }; }; }; }; IF (!self.test && !deop.test && iscset(B $6)) { @ :mode = get_cookie(Shit $3 $5 $6); IF (mode & 8) {_proc.mode_add $4 $3 -o $5}; }; }; ON #^HOOK -13 "MODE+k *" { IF (!oper.test || self.test || !iscset(K $6)) {RETURN}; UNLESS ([$2]==[SERVER]) { IF (iscset(M $6) && stripcrap(ALL $5) != [$5]) { _proc.quote_add $4 KICK $3 $1 :Bogus key detected!; _proc.mode_add $4 $3 -k $5; }; }{ IF (iscset(N $6)) {_proc.mode_add $4 $3 -k $5}; }; }; # check lamers that cycle. ALIAS _proc.cyc_check (host,hash) { @ :indx = hash_32bit($host); @ :test = cycle_lamer[$hash][$indx]; IF (strlen($test)) { @ :diff = (time() - when) % 60; IF (diff < 4) { ^ASSIGN -cycle_lamer[$hash][$indx]; RETURN 1; }{ @ cycle_lamer[$hash][$indx] = time(); RETURN 0; } }{ @ cycle_lamer[$hash][$indx] = time(); RETURN 0; }; }; # check lamers that are mass-deopping/kick. ALIAS _proc.mass_check (uh,hash) { @ :indx = hash_32bit($uh); @ :test = mass_lamer[$hash][$indx]; IF (strlen($test)) { @ :when = word(0 $test); @ :many = word(1 $test) + 1; @ :diff = (time() - when) % 60; IF (diff < 60 && many >= FLOOD_AFTER) {RETURN 1}; }{ @ :when = time(); @ :many = 1; }; @ mass_lamer[$hash][$indx] = when ## [ ] ## many; RETURN 0; }; # # $0=server $1=channel $2=mode $3=modearg ALIAS _proc.mode_add (serv,chan,mode,rest) { @ :hash = hash_32bit($chan); IF (strlen($chan_mode[$serv$hash]) >= (lice.get(main.mnm) * 2)) { _proc.quote_add $serv MODE $chan $chan_mode[$serv$hash] $chan_rest[$serv$hash]; ^ASSIGN -chan_mode[$serv$hash]; ^ASSIGN -chan_rest[$serv$hash]; }; @ chan_mode[$serv$hash] #= mode; PUSH chan_rest[$serv$hash] $rest; }; # $0=server $1=channel ALIAS _proc.mode_flush (serv,chan) { @ :hash = hash_32bit($chan); IF (strlen($chan_mode[$serv$hash])) { _proc.quote_add $serv MODE $chan $chan_mode[$serv$hash] $chan_rest[$serv$hash]; ^ASSIGN -chan_mode[$serv$hash]; ^ASSIGN -chan_rest[$serv$hash]; ^ASSIGN -delayed_modes[$serv][$hash]; }; _proc.quote_flush $serv; }; # $0=server $1=message ALIAS _proc.quote_add (serv,text) { @ :len = strlen($text); IF ((strlen($quote[$serv]) + len) >= lice.get(main.qbuff)) {_proc.quote_flush $serv}; @ quote[$serv] #= text ## chr(13); }; # $0=server ALIAS _proc.quote_flush (serv) { XQUOTE -S $serv $quote[$serv]; ^ASSIGN -quote.$serv; }; ### END Modes parser. ### KICK parser. ON #-KICK -13 * { @ :serv = servernum(); @ :nick = servernick($serv); IF ([$0] == nick) { _proc.channel_remove $serv $2; IF (ismset(U)) {_proc.away_save LiCe licelogd [$2] $1 \($userhost()\) kicked you [$3-]}; RETURN; }; IF (nick != [$1] && [$0]!=[$1] && ischanop($nick $2)) { @ :hash = hash_32bit($2); @ :mode = get_cookie(User $2 $1 $hash); IF (iscset(P $hash) && !(mode & 4)) { @ :mode = get_cookie(User $2 $0 $hash); IF (mode & 64) {_proc.quote_add $serv INVITE $0 $2}; IF (mode & 128) {_proc.quote_add $serv KICK $2 $1 :$0: $randread($main.reason_revenge)}; _proc.quote_flush $serv; }; }; _proc.cookies_remove $2 $0; }; ### END KICK parser. ### JOIN/PART PARSING ROUTINES ON #-CHANNEL_SYNC -13 * { _proc.channel_remove $2 $0; _proc.channel_create $2 $hash_32bit($0) $0; XECHO -W $chanwin($0) $fmt.banner_chan() Channel $0 has synched in $1s \(Sets\: \+$lice.get(chan[$hash_32bit($0)][S])\); }; ON #-JOIN -13 * { UNLESS ([$0] == servernick()) { ^ASSIGN join.test 0; @ :serv = servernum(); @ :hash = hash_32bit($1); IF (ischanop($servernick() $1)) { IF (iscset(B $hash)) {_proc.join_shit $0 $2 $1 $hash $serv}; IF (iscset(D $hash) && !join.test) {_proc.join_bans $0 $2 $1 $hash $serv}; IF (iscset(P $hash) && !join.test) {_proc.join_usr1 $0 $2 $1 $hash $serv}; }{ IF (iscset(P $hash)) {_proc.join_usr2 $0 $2 $1 $hash $serv}; }; IF (iscset(H $hash) && !join.test) {_proc.join_ip $0 $2 $1}; IF (iscset(J $hash) && !join.test) {_proc.join_clones $0 $2 $1 $hash $serv}; IF (iscset(E $hash)) {_proc.note_get $0}; }{ UNLESS (strlen($temp.my_ip_address)) {@ temp.my_ip_address = nametoip($after(@ $2))}; UNLESS (lice.get(main.cch) == 0) { ^TIMER -REF SYNC[$hash] $lice.get(main.cch) { UNLESS (strlen($lice.get(chan[$hash_32bit($1)][S])) || !onchannel($servernick() $1)) { leave $1; WAIT -CMD WINDOW $winchan($1) CHANNEL "$1 $key($1)"; }; }; }; }; }; ON #-PART -13 * { @ :serv = servernum(); UNLESS ([$0] == servernick($serv)) {_proc.cookies_remove $1 $0}; }; ALIAS _proc.cookies_remove (chan,nick) { @ :h_chan = hash_32bit($chan); @ :h_nick = hash_32bit($nick); ^ASSIGN -Cookie[Shit][$h_chan][$h_nick]; ^ASSIGN -Cookie[User][$h_chan][$h_nick]; }; ALIAS _proc.channel_remove (serv,chan) { @ :hash = hash_32bit($chan); @ delarray(B$serv\-$hash); @ delarray(E$serv\-$hash); @ delarray(I$serv\-$hash); ^ASSIGN -chan_mode[$serv$hash]; ^ASSIGN -chan_rest[$serv$hash]; fmt.titlebar $chan_topic[$winnum()$hash_32bit($chanwin())]; IF (numwords($myservers()) > 1) { FE ($remw($servername($serv) $myservers())) server { @ :srv = servernum($server); @ :chn = mychannels($srv); IF (rmatch($chan $chn)) {RETURN}; }; }; UNLESS (iscset(A $hash)) { IF (strlen($bw[$hash])) { ^ON #-raw_irc 26 -"% PRIVMSG $chan :*\\[$bw[$hash]\\]*"; ^ASSIGN -bw[$hash]; }; IF (strlen($bs[$hash])) { ^ON #-raw_irc 30 -"% PRIVMSG $chan :* $bs[$hash] *"; ^ASSIGN -bs[$hash]; }; purge chan.$hash; //^IGNORE $chan NONE; @lice.del(|$hash_32bit($chan)); @lice.del(chan[$hash][S]); }; }; ALIAS _proc.channel_create (serv,hash,chan) { XEVAL -S $serv { UNLESS (onchannel($servernick() $chan)) {RETURN}; @lice.set(chan[$hash][S] ${strlen($lice.get(chan[$hash][S])) ? lice.get(chan[$hash][S]) : lice.get(main.cset)}); IF (iscset(Q $hash)) {//^IGNORE $chan CTCPS TOPICS NOTICES JOINS NICKS PARTS}; IF (iscset(E $hash)) {_proc.note_get $chan}; IF (ischanop($servernick($serv) $chan)) { IF (iscset(L $hash) && strlen($lice.get(chan[$hash][L]))) {QUOTE MODE $chan $lice.get(chan[$hash][L])}; IF (iscset(T $hash) && strlen($lice.get(chan[$hash][T]))) {QUOTE TOPIC $chan :$lice.get(chan[$hash][T])}; }; @ list_mutex[B$serv$hash] = 1; QUOTE MODE $chan +b; # IrcNet +e/+I support IF (left(4 $R) == [2.10]) { @ list_mutex[E$serv$hash] = 1; @ list_mutex[I$serv$hash] = 1; QUOTE MODE $chan +e; QUOTE MODE $chan +I; }; }; }; ### END OF JOIN/PART PARSING ROUTINES ### Netsplit detection routines. ^ASSIGN temp.domains ?? com edu net org gov; ON ^CHANNEL_SIGNOFF '% % %.\\\\[\$temp.domains\\\\] %.\\\\[\$temp.domains\\\\]' { _proc.cookies_remove $0 $1; _proc.split_save $2 $3 $0 ${ischanop($1 $0)?[@]:[]}$1; }; ### END Netsplit detection routines. ### DCC REQUEST PARSING ALIAS _proc.dcc_update_queue { IF (temp.dcc_active > 0) {@ temp.dcc_active--}; }; ON #-DCC_LOST -13 "% GET *" {_proc.dcc_update_queue}; ON #-DCC_LOST -13 "% SEND *" {_proc.dcc_update_queue}; ON #-DCC_LOST -13 "% CHAT % *" { @ :id = finditem(DQCHAT $0); UNLESS (id == -1) {@ delitem(DQCHAT $id)}; }; ON ^DCC_LOST "% % % IDLE TIME EXCEEDED" { XECHO -C $fmt.banner_dcc() Auto: Closing DCC $1 to $0 after $tdiff($DCC_TIMEOUT) of wait.; }; ON #-DCC_REQUEST 13 "% CHAT *" { IF (finditem(DQCHAT $0) < 0) {queue.add DQCHAT 10 $0}; IF (L || A || chat.test) { XECHO -C $fmt.banner_dcc() DCC CHAT request from $0 ${servername($winserv()) != S ? [\($servername($servernum())\)] : []}; ECHO $fmt.banner_dcc() Type "/CHAT" to connect to $0.; }{ @ chat.test = 1; INPUT_CHAR "Connect DCC CHAT from $0 ? " { IF ([$0]==[Y]) {CHAT}{^DCC CLOSE CHAT $queue.tail(DQCHAT)}; ^ASSIGN -chat.test; }; }; }; ON #-DCC_REQUEST -13 "% SEND % % % % %" { @ :file = (left(1 $5) == [.]) ? [_] ## rest(1 $5) : [$5]; IF (isdset(C)) { WAIT -CMD //^DCC CLOSE GET $0 $file; RETURN; }; @ :nfile = ismset(V) ? toupper($0) ## [\-] ## file : file; //^DCC RENAME $0 $file $nfile; IF (isdset(R)) { @ :size = fsize($DCC_STORE_PATH/$nfile); IF (size != -1 && size < [$6]) { ##//^DCC RENAME $0 $nfile $DCC_STORE_PATH/$nfile; ##WAIT -CMD //^DCC RESUME $0 $DCC_STORE_PATH/$nfile; WAIT -CMD //^DCC RESUME $0 $nfile; IF (ismset(U)) {_proc.away_save LiCe licelogd [DCC] RESUMED $file from $0 \($userhost()\)}; RETURN; }; IF (size != -1 && size == [$6]) { @ :serv = servernum(); WAIT -CMD //^DCC CLOSE GET $0 $nfile; UNLESS (isdset(Q)) {_proc.quote_add $serv NOTICE $0 :Sorry, $file already exists.}; RETURN; }; }; @ :new_file = nfile; UNLESS (isdset(O)) { WHILE (fexist($DCC_STORE_PATH/$new_file) == 1) {@ :new_file #= [_]}; IF (finditem(DQGET $0 $new_file) < 0) {//^DCC RENAME $0 $nfile $new_file}; }; IF (isdset(G)) { queue.add DQGET $lice.get(main.dcc_get_queue) $0 $new_file; ^TIMER -REF DQLOAD 7 _proc.dcc_queue_load GET; }{ XECHO -C $fmt.banner_dcc() Incoming file from $0, type: "/DCC GET $0 \($new_file\)" to download.; IF (ismset(U)) {_proc.away_save LiCe licelogd [DCC] Pending DCC GET $new_file from $0 \($userhost()\)}; }; }; ON ^DCC_CHAT "% REDIRECT *!*@* *" { XECHO -C $fmt.banner_dcc() DCC REDIRECT GET [$5 $rightw(1 $3-)] from $before(! $2) \($after(! $2)\) via $0\...; XEVAL -S $servernum($S) PRETEND :$2 PRIVMSG $N :$chr(1)$3-$chr(1); ### XXX - not always accurate! }; ON #-DCC_REQUEST -9 "% SEND % % % % %" { @ dd.nick = [$0]; @ dd.host = [$3]; @ dd.rhost = nametoip($after(@ $get_uh($ddnick))); @ dd.port = [$4]; @ dd.file = [$5]; @ dd.size = [$6]; IF (strlen($dd.rhost) && dd.host != dd.rhost) { XECHO -C $fmt.banner_dcc() WARNING: Fake dcc handshake detected! [$dd.rhost appears to be $dd.host]; INPUT "[?] Proceed assuming $dd.nick has a misconfigured mIRC client? (y/n):" { IF (left(1 $0) == [y] || left(1 $0) == [Y]) { XEVAL -S $servernum($S) PRETEND :$dd.nick PRIVMSG $N :$chr(1)DCC SEND $dd.file $dd.rhost $dd.port $dd.file $dd.size$chr(1); }{WAIT -CMD //^DCC CLOSE GET $dd.nick}; }purge dd}; }; ### END DCC REQUEST PARSING ### MSG/NOTICE/PUBLIC PARSING - THIS WAS A PAIN!!!!! -HS # Tell me about it! Thanks fudd for helping. tjh ^ON ^PUBLIC '% % *\\\\[\$lice.get(main.buf)\\\\]*' {_proc.reply_action $userhost() $*}; ^ON ^PUBLIC_MSG '% % *\\\\[\$lice.get(main.buf)\\\\]*' {_proc.reply_action $userhost() $*}; ^ON ^PUBLIC_OTHER '% % *\\\\[\$lice.get(main.buf)\\\\]*' {_proc.reply_action $userhost() $*}; ALIAS _proc.reply_action (uh,nick,chan,text) { IF (ismset(H)) { FE ($lice.get(main.buf)) arw { FE ($pattern(*${arw}* $text)) hlword { @ :hlw = mid($substr($arw $hlword) $strlen($arw) $hlword); IF (!strlen($pattern($encode($hlw) $seen))) { @ :text = sar(cg/$hlw/${hlw}/$text); @ push(:seen $encode($hlw)); }; }; }; }; @ :cwin = winchan($chan); IF (cwin == -1) { XECHO -W $chan $fmt.auto_reply_other($nick $chan $text); }{ @ :lame = iscurchan($chan) ? fmt.auto_reply($nick $chan $text) : fmt.auto_reply_other($nick $chan $text); XECHO -W $chan $lame; IF (winnum() != cwin && ismset(1)) { XECHO -C $fmt.banner_info() Auto-reply in window #$cwin ${servername($winserv()) != S ? [\($chan@$servername($servernum())\)] : [\($chan\)]}; }; }; IF (ismset(P)) {_proc.away_save $nick $uh [$chan] $text}; IF (ismset(2)) {_proc.tab_add $servernum() $nick}; }; ON #-MSG 13 * { @ :serv = servernum(); IF (ismset(M)) {_proc.away_save $0 $userhost() $1-}; IF (!isset(Q) && ismset(R) && A && gone_away[$serv] && (findw($0 $tabnick[$serv]) == -1)) {QUOTE NOTICE $0 :Gone for $tdiff(${time() - gone_away[$serv]}) ${ismset(M) ? [please leave me a message.] : []}}; _proc.tab_add $serv $0; queue.add ML 7 $fmt.msg($*); }; ON #-MSG_GROUP 13 * { IF (ismset(N)) {_proc.away_save $0 $userhost() [$1] $2-}; queue.add ML 7 $fmt.msg_group($*); }; ON #-NOTICE 13 * { IF (ismset(N)) {_proc.away_save $0 $userhost() $1-}; @ :nt = match(*Wall* $1) ? [WL] : [NL]; queue.add $nt 7 $fmt.notice($*); _proc.tab_add $servernum() $0; }; ON #-ACTION 13 '% % *\\\\[\$lice.get(main.mbuf)\\\\]*' { IF (ismset(A)) {_proc.away_save $0 $userhost() [action:$1] * $0 $2-}; }; ON #-PUBLIC 13 * { IF (ismset(P) && match(** $igtype($rigmask($0!$userhost($0))))) { ^ASSIGN logd 1; _proc.away_save $0 $userhost($0) [$1] $2-; }; }; ON #-PUBLIC_NOTICE 13 * { queue.add NL 7 $fmt.public_notice($*); }; ### END MSG/NOTICE PARSING # saves msg's when away. ALIAS _proc.away_save { UNLESS (A || logd) {RETURN}; IF (temp.nrm == lice.get(main.mrm) && !delitem(AM 0)) {@ temp.nrm--}; IF (setitem(AM $temp.nrm $time() $0 $1 $2-) >= 0) {@ temp.nrm++}; IF (ismset(E)) {@ write($awayfd + $encode($getitem(AM ${temp.nrm - 1})))}; ^SET STATUS_USER1 $temp.nrm; ^ASSIGN -logd; }; ### Userlist manipulation functions # finds a host match for user, # returns the handle's hash index - 0 on failure # $0=list $1=n!u@h ALIAS find_in_list (indx,nuh) { @ :list = indx ## [list]; FOR (@ :cnt=0, numitems($list) > cnt, @ :cnt++) { @ :hand = getitem($list $cnt); @ :hash = hash_32bit($hand); @ :test = finditem($indx$hash $nuh); @ :test = (test < 0) ? rmatchitem($indx$hash $nuh) : test; ###@ :test = getrmatches($indx$hash $nuh) #IF (test >= 0) {RETURN $hash} IF (test >= 0) {PUSH FUNCTION_RETURN $hash}; }; IF (!FUNCTION_RETURN) {@ FUNCTION_RETURN = 0}; }; ## finds a channel match for user, ## returns the modes for the channel - 0 on failure ## $0=list $1=channel $2=n!u@h ALIAS find_in_chan (list,chan,hash,nuh) { @ :hand = find_in_list($list $nuh); UNLESS (hand) {RETURN 0}; @ :test = (word(0 $getitem(Chan$list$hand 0)) == [#*]) ? 0 : matchitem(Chan$list$hand $chan *); IF (test < 0) {RETURN 0}; @ :mode = word(1 $getitem(Chan$list$hand $test)); @ :nick = hash_32bit($before(! $nuh)); ^ASSIGN Cookie.User[$hash][$nick] $hand $mode; @ FUNCTION_RETURN = mode; }; ALIAS find_in_a_chan (list,chan,hash,nuh) { @ :myhand = find_in_list($list $nuh); UNLESS (myhand) {RETURN 0}; FE ($myhand) hand { @ :test = (word(0 $getitem(Chan$list$hand 0)) == [#*]) ? 0 : matchitem(Chan$list$hand $chan *); IF (test < 0) {CONTINUE}; @ :mode = word(1 $getitem(Chan$list$hand $test)); @ :nick = hash_32bit($before(! $nuh)); ^ASSIGN Cookie.User[$hash][$nick] $hand $mode; @ FUNCTION_RETURN = mode; }; }; ## retrives a previously saved userlist cookie. ## returns the modes for the channel - 0 on failure ## $0=list $1=channel $2=nick $3=hash ALIAS get_cookie (list,chan,nick,hash) { @ :h_nick = hash_32bit($nick); @ :mode = word(1 $Cookie[$list][$hash][$h_nick]); @ FUNCTION_RETURN = mode ? mode : find_in_a_chan($list $chan $hash $nick!$userhost($nick)); }; # ### Initialize ... #int main (int argc, char **argv, char **env) { ALIAS main_init { ^LOCAL load_list; ^WINDOW KILL_OTHERS; ^SET DISPLAY ON; @ srand(${time() + pid()}); PUSH load_list $LiCePath/lice/lice.binds $LiCePath/lice/lice.fkeys $LiCePath/lice/lice.stubs; PUSH load_list $which($lice.save_path/lice.address) $which($lice.save_path/lice.users); LOAD $load_list; IF (lice.get(main.theme) != [default]) {LOAD $which($LiCePath/themes/$lice.get(main.theme))}; # Read all settings from the database lice.load_db; # load notify list from db //^NOTIFY $lice.get(lice.notify); # MSG/DCC/TOPIC window IF (iswset(W)) {^WINDOW NEW NAME MW LEVEL NONE DOUBLE OFF NOSERV STATUS_FORMAT " Message Window %>-- Type /WTOG W to finish -- " LAST}; IF (iswset(C)) {^WINDOW NEW NAME CW LEVEL NONE DOUBLE OFF NOSERV STATUS_FORMAT " Chatting Window %>-- Type /WTOG C to finish -- " LAST}; IF (iswset(T)) { ^WINDOW TOPLINE 1 " -- LiCe Titlebar [tm] --"; ^WINDOW TOPLINES 1; }; # Check for updates on startup, if enabled! IF ((dlu != 1) && isset(U)) {^TIMER -REF UPDATE 60 UPDATE}; # misc /set's IF (isset(Q)) { ^STACK POP SET CLIENT_INFORMATION; }{ ^STACK PUSH SET CLIENT_INFORMATION; ^SET CLIENT_INFORMATION $lice(); }; IF (isdset(R)) {^SET MIRC_BROKEN_DCC_RESUME ON}; IF (ismset(B)) {^ON #-MSG 617 * {IF (A) {//BEEP}}}; # If we have saved messages, put them back into the saved buffer IF (ismset(E)) {_proc.play_restore}; ^SET STATUS_USER $lice.get(main.set); ^SET STATUS_USER1 $temp.nrm; ^SET STATUS_USER2 ??; ^SET STATUS_USER3 Idle: ?; # hack to fix the realname annoyance. @ :test = getenv(IRCNAME); IF (strlen($test) && test != REALNAME) {^SET DEFAULT_REALNAME $test}; # auto-nick setup ^ON #^NOTIFY_SIGNOFF 13 '$lice.get(main.auto_nick)' { ECHO $fmt.banner_alert() Nick $lice.get(main.auto_nick) is now available (AutoNick); IF (isset(A)) {^TIMER 5 NICK $lice.get(main.auto_nick)}; }; IF (lice.get(main.auto_nick)) {^NOTIFY $lice.get(main.auto_nick)}; # Let the user know what their autoreply buffer is set to ar; ^WINDOW NAME 1 DOUBLE ${iswset(D)?[ON]:[OFF]} BEEP_ALWAYS ${iswset(B)?[ON]:[OFF]} LEVEL ALL; IF (strlen($lice.get(main.umode))) {^TIMER -REF UMODE 7 {MODE $servernick() $lice.get(main.umode)}}; # hook to catch /SETs and write them to the db ^ON #-SET 13 * (set,data) { IF (getsets($set) && (@data)) { @lice.set(*$set $data); }; }; ^ASSIGN bench.ftime $utime(); XECHO -w 0 -v -B You got infested with LiCe $id.v in ${word(0 $bench.ftime) - word(0 $bench.stime)}.${word(1 $bench.ftime) - word(1 $bench.stime) < 0 ? [${1000000 + word(1 $bench.ftime) - word(1 $bench.stime)}] : [${word(1 $bench.ftime) - word(1 $bench.stime)}]} secs.; # clean up purge bench; ^ALIAS -main_init; }; main_init; # cag/00 # HS/04-04 # tjh/16 # tjbh/15 lice5/lice/0000755000175000017500000000000012715251177011147 5ustar timtimlice5/lice/lice.kickban0000644000175000017500000000303212715251177013405 0ustar timtim# # IRC Script Program. For use with ircii-EPIC5 clients. # Copyright (C) 2000 SrfRoG (cag@codehack.com) # # --------------------------------------------------------------------------- # All code by SrfRoG, unless specified. Visit https://lice.muppetz.com # --------------------------------------------------------------------------- # Updated for EPIC5 by tjh IF (word(2 $loadinfo()) != [pf]) { LOAD -pf $word(1 $loadinfo()); RETURN; }; PACKAGE LiCe; ALIAS _proc.kick_ban { UNLESS (ischanop($N $C)) { XECHO -B $ch($C)\: You're not channel operator.; RETURN; }; UNLESS (strlen($1)) { //KICK; RETURN; }; IF (rmatch($1 *.* *!* *@* %\\* \\*%)) { ^LOCAL nick %; @ :pat = uhc($1); get_user_match $C $pat kick_list; @ kick_list = remw($N $kick_list); }{ @ :pat = onchannel($1 $C) ? makeban(B$0 $userhost($1)) : [$1!*@*]; ^ASSIGN kick_list $1; ^LOCAL nick $1; }; @ kick_msg = strlen($2) ? [$2-] : randread($main.reason_kick); @ :serv = winserv(); _proc.ban $C $serv $pat $nick; _proc.loop_kick $serv $C kick_list kick_msg; IF ([$0]==[S]) { ECHO $fmt.banner_kick() Ignoring all crap from $pat; //^IGNORE $pat ALL CRAP -PUBLIC REASON "Kickban on $stime($time())"; @lice.set(|$hash_32bit($pat) $pat ALL CRAP -PUBLIC REASON "Kickban on $stime($time())"); }; }; ALIAS kb {_proc.kick_ban N $*}; ALIAS ka {_proc.kick_ban A $*}; ALIAS kh {_proc.kick_ban H $*}; ALIAS kf {_proc.kick_ban F $*}; ALIAS ku {_proc.kick_ban U $*}; ALIAS ki {_proc.kick_ban S $*}; ALIAS kbi {ki $*}; #tjh/15 lice5/lice/lice.gone0000644000175000017500000000156212715251177012741 0ustar timtim# # IRC Script Program. For use with ircii-EPIC5 clients. # Copyright (C) 2000 SrfRoG (cag@codehack.com) # # --------------------------------------------------------------------------- # All code by SrfRoG, unless specified. Visit https://lice.muppetz.com # --------------------------------------------------------------------------- # Updated for EPIC5 by tjh IF (word(2 $loadinfo()) != [pf]) { LOAD -pf $word(1 $loadinfo()); RETURN; }; PACKAGE LiCe; ALIAS gone { @ :serv = serverctl(FROM_SERVER); @ quiet_test[$serv] = ismset(Q); @ :gone.msg = randread($main.reason_gone); UNLESS (strlen($gone.msg)) {@ :gone.msg = [https://lice.muppetz.com]}; SWITCH ($0) { () {AWAY $gone.msg}; (-a) {AWAY -all ${strlen($1)?[$1-]:gone.msg}}; (-q) { @ quiet_test[$serv] = 1; AWAY ${strlen($1)?[$1-]:gone.msg}; }; (*) {AWAY $*}; }; }; #tjh/12 lice5/lice/lice.trans0000644000175000017500000001103612715251177013135 0ustar timtim# # IRC Script Program. For use with ircii-EPIC5 clients. # Copyright (C) 2000 SrfRoG (cag@codehack.com) # # --------------------------------------------------------------------------- # All code by SrfRoG, unless specified. Visit https://lice.muppetz.com # Original suggestion by whitefang, based on a script by Dethnite. # --------------------------------------------------------------------------- # a BITCH to fix -by HSOC'01 # a BITCHX3 to fix -by HSOC'03 # It's broken again tjh/09 - TODO try to fix oneday. # Updated for EPIC5 by tjh IF (word(2 $loadinfo()) != [pf]) { LOAD -pf $word(1 $loadinfo()); RETURN; }; PACKAGE LiCe; # Hooks for grabbing text ON #-DCC_RAW 400 "% w3.systranlinks.com D ?textarea *translation? *" { ^ASSIGN temp.trans_work 1; ^LOCAL text $3-; @ temp.trans_text = rest(${index(> $text) + 1} $text); }; ON #-DCC_RAW 400 "% w3.systranlinks.com D *" { IF (temp.trans_work) {PUSH temp.trans_text $3-}; IF (MATCH(*
* $temp.trans_text)) {^ASSIGN temp.trans_work 0}; }; #ON #-DCC_RAW 400 "% w3.systranlinks.com D
" {^ASSIGN temp.trans_work 0} #ON #-DCC_RAW 400 "% w3.systranlinks.com D
" {^ASSIGN temp.trans_work 0} # XXX - target translations should be fixed to break lines when they are larger than the buffer. ON #-DCC_RAW 400 "% w3.systranlinks.com C" { IF (strlen($temp.trans_text)) { UNLESS (strlen($temp.trans_send)) { iecho Translating text from $temp.trans_desc ...; iecho $word(0 $temp.trans_desc)\: $temp.trans_orig; iecho $word(2 $temp.trans_desc)\: $before(< $temp.trans_text); }{ XEVAL -S $servernum($S) $temp.trans_send $temp.trans_target $before(< $temp.trans_text); mecho $fmt.send_msg($temp.trans_target $before(< $temp.trans_text)); ^ASSIGN -temp.trans_send; ^ASSIGN -temp.trans_target; }; ^ASSIGN -temp.trans_text; }{ iecho Translation failed.; }; ^ASSIGN -temp.trans_orig; ^ASSIGN -temp.trans_desc; ^ASSIGN -temp.trans_work; }; ^ASSIGN trans.102 en_fr English to French; ^ASSIGN trans.103 en_de English to German; ^ASSIGN trans.112 en_pt English to Portuguese; ^ASSIGN trans.115 en_es English to Spanish; ^ASSIGN trans.105 en_it English to Italian; ^ASSIGN trans.70 fr_en French to English; ^ASSIGN trans.71 de_en German to English; ^ASSIGN trans.80 pt_en Portuguese to English; ^ASSIGN trans.83 es_en Spanish to English; ^ASSIGN trans.73 it_en Italian to English; ^ASSIGN trans.114 en_ru English to Russian; ^ASSIGN trans.82 ru_en Russian to English; ^ASSIGN trans.100 en_nl English to Dutch; ^ASSIGN trans.68 nl_en Dutch to English; ^ASSIGN trans.106 en_ja English to Japanese; ^ASSIGN trans.74 ja_en Japanese to English; ^ASSIGN trans.99 en_zh English to Simplified Chinese; ^ASSIGN trans.67 zh_en Simplified Chinese to English; # And here's the actual command. ALIAS trans { @ flag = strlen($flag) ? flag : 115; @ :opts = []; WHILE (opts = getopt(optopt optarg "FGIPSRCDJrcdjfgim:n:ops" $*)) { SWITCH ($opts) { (f) (g) (p) (s) (i) (c) (d) (j) (r) (R) (C) (D) (J)(F) (G) (P) (S) (I) {@ flag = ascii($optopt)}; (m) { ^ASSIGN temp.trans_send MSG; @ temp.trans_target = optarg; }; (n) { ^ASSIGN temp.trans_send NOTICE; @ temp.trans_target = optarg; }; (o) {^ASSIGN temp.trans_send SEND}; (-) {uecho Missing argument for "-$optopt";RETURN}; }; }; UNLESS (strlen($optarg)) { uecho Usage: /TRANS [[-cCdDfFgGiIjJpPrRsS][-o][-m ][-n ]] ; uecho Usage: Default translation is $restw(1 $trans[$flag]); RETURN; }; @ temp.trans_desc = restw(1 $trans[$flag]); ^ASSIGN temp.trans_orig $optarg; ^ASSIGN temp.trans_work 0; @ :orig = fnexist(urlencode) ? urlencode($temp.trans_orig) : msar(g/'/%27/`/%60/ /%20/$temp.trans_orig); @ :lang = word(0 $trans[$flag]); @ :sock = connect(w3.systranlinks.com 80); WAIT =$sock; //^DCC RAW $sock w3.systranlinks.com GET /systran/cgi\?translated_text=\&urltext=$orig\&lp=$lang\&partner=demo-SystranSoft-en; //^DCC RAW $sock w3.systranlinks.com User-Agent: Mozilla/7.02 [en] (X11; I; Linux 2.4.25 i686; Nav); //^DCC RAW $sock w3.systranlinks.com Referer: http://www.systransoft.com/Homepage.html; //^DCC RAW $sock w3.systranlinks.com Host: www.systranlinks.com:80; //^DCC RAW $sock w3.systranlinks.com Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, image/png, */*; //^DCC RAW $sock w3.systranlinks.com Accept-Languange: en; //^DCC RAW $sock w3.systranlinks.com Accept-Charset: iso-8859-1; //^DCC RAW $sock w3.systranlinks.com $chr(10); }; ##HS/03 #tjh/09 lice5/lice/lice.update0000644000175000017500000000761112715251177013274 0ustar timtim# # IRC Script Program. For use with ircii-EPIC5 clients. # Copyright (C) 2000 SrfRoG (cag@codehack.com) # # --------------------------------------------------------------------------- # All code by SrfRoG, unless specified. Visit https://lice.muppetz.com # --------------------------------------------------------------------------- # Updated for EPIC5 by tjh IF (word(2 $loadinfo()) != [pf]) { LOAD -pf $word(1 $loadinfo()); RETURN; }; PACKAGE LiCe; # Todo - Document the format of lice_updates.txt for easy reference ^ASSIGN update.site http://lice.muppetz.com/sites/lice.muppetz.com/files/LiCe/updates/$id.v; ^ASSIGN update.list $lice.save_path/.lice_updates.txt; # this routine checks that the path to the local file exists, and creates new # directories as necessary. ALIAS _proc.update_checkpath (rpath) { @ :path = urldecode($rpath); @ :path = mid(0 $rindex(/ $path) $path); @ temp.update_mess = split(/ $urldecode($path)); @ :segm = []; DO { @ :step #= segm ## [/]; IF (fexist($step) == -1 && mkdir($step)) {XECHO -C $fmt.banner_info() Created dir: $step}; } WHILE (:segm = shift(temp.update_mess)); }; # this routine copies the local file to its new location in the load path ALIAS _proc.update_copyfile (t_file) { _proc.update_checkpath $t_file; @ :l_file = urldecode($t_file); @ :rv = rename($l_file $l_file\.old); @ :rv = rename($t_file $l_file); RETURN $rv; }; # this routine recursively downloads files from the remote server. # some lame statistics are displayed at the end. # XXX - WHY DO WE NEED TIMER THERE?@!??@! ALIAS _proc.update_s3 { IF (strlen($update_requests)) { @ :r_file = shift(update_requests); @ :l_file = LiCePath ## [/] ## urlencode($r_file); ^ON ^HOOK "WGET_STATUS $l_file DONE %" { @ :rv = _proc.update_copyfile($1); UNLESS (rv) { @ temp.update_files += 1; @ temp.update_bytes += [$3]; }; _proc.update_s3; ^ON ^HOOK -"WGET_STATUS $1 ERROR *"; ^ON ^HOOK -"WGET_STATUS $1 DONE %"; }; ^ON ^HOOK "WGET_STATUS $l_file ERROR *" { _proc.update_s3; ^ON ^HOOK -"WGET_STATUS $1 DONE %"; ^ON ^HOOK -"WGET_STATUS $1 ERROR *"; }; TIMER 0 _proc.wget_main $update.site/$r_file $l_file; XECHO -C $fmt.banner_info() Requesting file $r_file; }{ IF (temp.update_files) {XECHO -C $fmt.banner_info() Update complete: $temp.update_files file$plural($temp.update_files)\, $temp.update_bytes byte$plural($temp.update_bytes)}; ^ASSIGN -temp.update_files; ^ASSIGN -temp.update_bytes; ^ASSIGN -temp.update_mess; }; }; # this routine will check the local files with those in the list we fetches # and those files with different size will be insert to a list for download. # XXX - downloads should sort by size # XXXX - I WISH WE HAD MD5 CHECKSUMS !! ALIAS _proc.update_s2 { @ :fd = open($update.list R); UNTIL (eof($fd)) { @ :line = read($fd); IF (left(1 $line) == [#]) {CONTINUE}; IF (left(1 $line) == [!]) { XECHO -C $fmt.banner_info() $rest(1 $line); CONTINUE; }; IF (left(1 $line) == [^]) { @ :majorv = 1; CONTINUE; }; @ :r_file = word(0 $line); @ :r_size = word(1 $line); IF (!strlen($r_file) || !isnumber($r_size)) {CONTINUE}; @ :l_size = fsize($LiCePath/$r_file); IF (r_size != l_size) {PUSH update_requests $r_file}; }; @close($fd); IF (strlen($update_requests)) { ^ASSIGN temp.update_files 0; ^ASSIGN temp.update_bytes 0; _proc.update_s3; }{ UNLESS (majorv) { XECHO -C $fmt.banner_info() No LiCe updates necessary.; }; }; }; # this routines fetches the remote update list that we'll use to check # local files. we silence errors. ALIAS _proc.update_s1 { @unlink($update.list); ^ON ^HOOK "WGET_STATUS $update.list DONE %" {_proc.update_s2}; _proc.wget_main $update.site/lice_updates.txt $update.list; }; ALIAS update {_proc.update_s1 $*}; ALIAS upgrade {update $*}; #tjh/14 lice5/lice/lice.redcc0000644000175000017500000000272212715251177013070 0ustar timtim# # IRC Script Program. For use with ircii-EPIC5 clients. # Copyright (C) 2000 SrfRoG (cag@codehack.com) # # --------------------------------------------------------------------------- # All code by SrfRoG, unless specified. Visit https://lice.muppetz.com # --------------------------------------------------------------------------- # Updated for EPIC5 by tjh IF (word(2 $loadinfo()) != [pf]) { LOAD -pf $word(1 $loadinfo()); RETURN; }; PACKAGE LiCe; ALIAS redcc { SWITCH ($0) { () { IF (temp.redirect_dcc) { XECHO -B Redirecting all DCC GET's to $temp.redirect_dcc via DCC CHAT.; }{uecho Usage: /REDCC [-q | ]}; }; (-q) { ^ON ^RAW_IRC -'*!*@* PRIVMSG $servernick() :$chr(1)DCC SEND *$chr(1)'; XECHO -B No longer redirecting DCC GET's${temp.redirect_dcc ? [ to $temp.redirect_dcc\.] : [.]}; ^ASSIGN -temp.redirect_dcc; }; (*) { ^ASSIGN temp.redirect_dcc $0; ^ON ^RAW_IRC '*!*@* PRIVMSG $servernick() :$chr(1)DCC SEND *$chr(1)' { @ :str = chop(1 $rest(2 $3-)); ECHO $fmt.banner_dcc() Redirecting DCC GET [$5 $rightw(1 $str)] from $before(! $0) to $temp.redirect_dcc ...; STACK PUSH ON SEND_DCC_CHAT; ^ON ^SEND_DCC_CHAT * #; ^MSG =$temp.redirect_dcc REDIRECT $0 $str; ^ON ^SEND_DCC_CHAT -; STACK POP ON SEND_DCC_CHAT; }; XECHO -B Now redirecting all DCC GET's to $temp.redirect_dcc\ via DCC CHAT.; }; }; }; #tjh/09 lice5/lice/lice.binds0000644000175000017500000002033412715251177013106 0ustar timtim# # LICE.BINDS v1.5.7 ircii script module for use with EPIC5 # Copyright (C) 2000 SrfRoG (cag@codehack.com) # refurbished by UNKNOWN and HSOC to work with latest EPIC.4 # Refurbished cleaned and leaned by tjh to work with latest EPIC5 # # ---------------------------------------------------------------------- # Filename : LICE.BINDS # Description: emulate unix screen via ircii and some external commands. # Author : SrfRoG (cag@codehack.com) # Notes : This module was made specifically for LiCe v4.x # : tjh updated it to work specifically for LiCe v5.x # ---------------------------------------------------------------------- # All originally by code by SrfRoG, unless specified. Visit https://lice.muppetz.com # --------------------------------------------------------------------------- IF (word(2 $loadinfo()) != [pf]) { LOAD -pf $word(1 $loadinfo()); RETURN; }; PACKAGE LiCe; # the various control commands. # we use ^W instead of ^A (screen) so we dont have conflicts # last win BIND ^Wa PARSE_COMMAND {//^WINDOW SWAP LAST}; BIND ^W^w PARSE_COMMAND {//^WINDOW SWAP LAST}; # balance (shared) BIND ^Wb PARSE_COMMAND { //WINDOW SHOW ${winnum()+1}; //WINDOW LAST; }; # create win BIND ^Wc PARSE_COMMAND {win_new}; BIND ^W^c PARSE_COMMAND {win_new}; # add win to current BIND ^WC PARSE_COMMAND {//^WINDOW NEW}; # clear win BIND ^Wf {CLEAR_SCREEN}; # grow size (shared) BIND ^Wg PARSE_COMMAND {//WINDOW GROW 1}; # hide win (shared) BIND ^Wh PARSE_COMMAND {//WINDOW HIDE}; # info BIND ^Wi PARSE_COMMAND { IF (C) { echo.status \($geom()\)+$curpos() Channel: %C, Sets: $chan[$hash_32bit($C)][S], PID: $pid(); }{ echo.status \($geom()\)+$curpos() - PID: $pid(); }; }; # change win's channel BIND ^Wj PARSE_COMMAND { INPUT "Join channel [key, if needed]: " IF (@) { @ :chan = ischannel($0) ? [$0] : [#$0]; //JOIN $chan ${strlen($1) ? [$1-] : []}; win_new CHANNEL $chan NAME $chan; ^ON -WINDOW_KILL "$winnum($chan) %" { ^ASSIGN -chan_topic[$chanwin($1)$hash_32bit($1)]; IF (onchannel($servernick() $1)) {leave $1}; ^ON -WINDOW_KILL -"$0 %"; }; }; }; # kill current win BIND ^Wk PARSE_COMMAND {//WINDOW KILLSWAP}; # kill current win (shared) BIND ^WK PARSE_COMMAND {//WINDOW KILL}; # refresh win BIND ^Wl REFRESH_SCREEN; # next win BIND ^Wn PARSE_COMMAND {//WINDOW NEXT}; BIND "^W " PARSE_COMMAND {//WINDOW NEXT}; # lastmsg BIND ^Wm PARSE_COMMAND {echo.status}; # next win (shared) BIND ^WN NEXT_WINDOW; # previous win BIND ^Wp PARSE_COMMAND {//WINDOW PREVIOUS}; # previous win (shared) BIND ^WP PREVIOUS_WINDOW; # create query win BIND ^Wq PARSE_COMMAND {INPUT "Nick to query, = for CHAT: " IF (@) {win_new ADD $0 NAME $0 QUERY $0 DOUBLE OFF LEVEL NONE}}; # shrink size (shared) BIND ^Wr PARSE_COMMAND {//WINDOW SHRINK 1}; # server BIND ^Ws PARSE_COMMAND {INPUT "Server[:port[:password[:nick[:network[:IRC/IRC-SSL]]]]]: " IF (@) {win_new SERVER $0;}}; # time :) BIND ^Wt PARSE_COMMAND {echo.status Current time: $strftime($time() %a, %d \(%H:%M\) %b %Y [%Z])}; # uptime / away time BIND ^Wu PARSE_COMMAND {echo.status Uptime: $tdiff2(${time() - F}) - Started: $strftime($F %c %Z) }; # list windows BIND ^Ww PARSE_COMMAND {//WINDOW LIST}; # prog version BIND ^Wv PARSE_COMMAND {echo.status LiCe v$id.v for EPIC5 - https://lice.muppetz.com }; # change win's name BIND ^Wy PARSE_COMMAND {INPUT "Set window's name to: " IF (@) {//^WINDOW NAME $0}}; # suspend BIND ^Wz STOP_IRC; # exec BIND ^W! PARSE_COMMAND {INPUT "Shell command (ENTER to cancel): " IF (@) {EXEC $*}}; # switch to another win BIND ^W' PARSE_COMMAND {INPUT "Switch to window [curr = $winnum()]: " IF (isdigit($0)) {//^WINDOW SWAP $0}}; # help BIND ^W? PARSE_COMMAND {HELP binds screen}; # opervision BIND ^Wo PARSE_COMMAND {_proc.screen_ov}; # lice partyline BIND ^WL PARSE_COMMAND {_proc.screen_pl}; # paste buffer BIND ^W> YANK_FROM_CUTBUFFER; # cut input buffer BIND ^W< ERASE_LINE; # quit BIND ^W\\\\ QUIT_IRC; # log win BIND ^WH PARSE_COMMAND {//WINDOW LOG TOGGLE}; # monitor win progress BIND ^WM PARSE_COMMAND {//WINDOW HOLD_MODE TOGGLE}; # next BIND ^W^` PARSE_COMMAND {//WINDOW NEXT}; # toggle beeping BIND ^W^G PARSE_COMMAND {//WINDOW BEEP_ALWAYS TOGGLE}; # licence BIND ^W, PARSE_COMMAND {HELP license}; # last win BIND ^W^X PARSE_COMMAND {//^WINDOW SWAP LAST}; # toggle double status for a single window BIND ^Wd PARSE_COMMAND {//^WINDOW DOUBLE TOGGLE}; # toggle double status for all windows BIND ^WD PARSE_COMMAND {FOR win in ($windowctl(REFNUMS)) {//^WINDOW $win DOUBLE TOGGLE};}; # jump to other windows BIND ^W1 PARSE_COMMAND {//^WINDOW SWAP 1}; BIND ^W2 PARSE_COMMAND {//^WINDOW SWAP 2}; BIND ^W3 PARSE_COMMAND {//^WINDOW SWAP 3}; BIND ^W4 PARSE_COMMAND {//^WINDOW SWAP 4}; BIND ^W5 PARSE_COMMAND {//^WINDOW SWAP 5}; BIND ^W6 PARSE_COMMAND {//^WINDOW SWAP 6}; BIND ^W7 PARSE_COMMAND {//^WINDOW SWAP 7}; BIND ^W8 PARSE_COMMAND {//^WINDOW SWAP 8}; BIND ^W9 PARSE_COMMAND {//^WINDOW SWAP 9}; BIND ^W0 PARSE_COMMAND {//^WINDOW SWAP 10}; # creates a window dedicated to shell ALIAS echo.status { @ temp.status_set = windowctl(GET 0 DOUBLE) ? [STATUS_FORMAT2] : [STATUS_FORMAT]; @ temp.status_data = getset($temp.status_set); ^TIMER 5 { ^STACK POP SET $temp.status_set; @ lice.set(*$temp.status_set $temp.status_data); ^ASSIGN -temp.status_set; ^ASSIGN -temp.status_data; }; ^STACK PUSH SET $temp.status_set; //^SET $temp.status_set [%R] ${@ ? [$*] : temp.last_msg}; ^ASSIGN temp.last_msg $*; }; ALIAS _proc.screen_pl { IF (winnam(PL) == [PL]) { XECHO -B There is already a Partyline window \($winnum(PL)\).; RETURN; }; win_new PL; //^WINDOW DOUBLE OFF STATUS_FORMAT "%T LiCe Partyline %>%F"; echo.status Partyline (PL) window activated. Kill window to quit.; }; ALIAS opervision {_proc.screen_ov}; ALIAS _proc.screen_ov { @ :serv = winserv(); @ :name = [OV] ## serv; IF (winnam($name) == name) { XECHO -B There is already an OperView window \($name\) for this server.; RETURN; }; win_new $name; //^WINDOW DOUBLE OFF SKIP ON LEVEL NONE STATUS_FORMAT "%T OperView on $servername($serv) %>%F"; ^ON ^WINDOW_KILL "$winnum($name) %" { //^WINDOW SWAP $rest(2 $1); @ :serv = mid(2 256 $0); echo.status OperVision (OV) on $servername($winserv()) window closed.; ^ON ^WINDOW_KILL -"$0 %"; }; echo.status OperVision (OV) window activated. Kill window to quit.; }; # to correctly swap our windows # SWITCH_WINDOWS: old screen, old window, new screen, new window ON ^SWITCH_WINDOWS * { //^WINDOW $3 LEVEL ALL; @ :chan = chanwin($3); IF (ischannel($chan)) {fmt.titlebar ${STATUS_DOES_EXPANDOS == [ON] ? [$$chan_topic[$3$hash_32bit($chan)]] : [$chan_topic[$3$hash_32bit($chan)]]}}; }; ON ^SWITCH_CHANNELS * { @ :win = chanwin($2); UNLESS (isnumber($win)) {RETURN}; IF (iswset(T) || win != -1) { @ :hash = hash_32bit($2); IF ([$chan_topic[$win$hash]] == []) { @windowctl(SET $win TOPLINE 1 -- LiCe Titlebar [tm] --); }{ @windowctl(SET $win TOPLINE 1 $fmt.titlebar($chan_topic[$win$hash])); }; }; }; # to create new windows ON ^WINDOW_CREATE * { IF (iswset(T)) {WINDOW $0 TOPLINES 1}; //^WINDOW DOUBLE ${iswset(D)?[ON]:[OFF]} BEEP_ALWAYS ${iswset(B)?[ON]:[OFF]}; }; ALIAS win_new { //^WINDOW NEW_HIDE; //^WINDOW $word(1 $windowctl(REFNUMS)) DOUBLE ${iswset(D)?[ON]:[OFF]} ${@ ? (strlen($1) ? [$*] : [NAME $0]) : []}; //^WINDOW SWAP LAST; }; # Binds that make our lives easier. BIND ^[f PARSE_COMMAND {_proc.split_info}; BIND ^[e PARSE_COMMAND {_proc.split_jump 1}; BIND ^[1 PARSE_COMMAND {_proc.split_jump 1}; BIND ^[2 PARSE_COMMAND {_proc.split_jump 2}; BIND ^[3 PARSE_COMMAND {_proc.split_jump 3}; BIND ^[4 PARSE_COMMAND {_proc.split_jump 4}; BIND ^[5 PARSE_COMMAND {_proc.split_jump 5}; BIND ^X SWITCH_CHANNELS; BIND ^I PARSE_COMMAND {tab_completion}; BIND ^O PARSE_COMMAND {msg_completion /IGNORE}; BIND ^R PARSE_COMMAND {msg_completion /INVITE}; BIND ^[k PARSE_COMMAND {join $pop(temp.invite)}; #Old Skuld binds! BIND ^[l PARSE_COMMAND ppl; BIND ^[c PARSE_COMMAND CLEAR; ## it's good (HSOC wrote it) :p # I never doubted it's goodness for a second - tjh BIND ^[r PARSE_COMMAND {msg_completion /RTAB}; BIND ^[` PARSE_COMMAND {protect}; BIND ^[\\ PARSE_COMMAND {rlag}; # Shortened Commands ALIAS ig {ignore $*}; ALIAS win {//WINDOW $*}; ALIAS fri {friend $*}; #HS/03 #tjbh/13 #tjh/15 lice5/lice/lice.invlist0000644000175000017500000000277112715251177013504 0ustar timtim# # IRC Script Program. For use with ircii-EPIC5 clients. # Copyright (C) 2000 SrfRoG (cag@codehack.com) # # --------------------------------------------------------------------------- # All code by SrfRoG, UNLESS specified. Visit https://lice.muppetz.com # --------------------------------------------------------------------------- # Updated for EPIC5 by tjh IF (word(2 $loadinfo()) != [pf]) { LOAD -pf $word(1 $loadinfo()); RETURN; }; PACKAGE LiCe; ### Ban-Invite manipulation routines. ALIAS binv { UNLESS (@) { uecho Usage: /BINV ; RETURN; }; ^LOCAL opt $1; UNLESS (rmatch($0 *!* *@* *.*)) { @ :uh = get_uh($0); UNLESS (strlen($uh)) { XECHO -B $0: No such nick; RETURN; }; _proc.inv $C $winserv() $makeban(B$toupper($opt) $uh) $0; }{ FE ($*) inv {_proc.inv $C $winserv() $inv %}; }; }; # $0 = channel, $1 = serverindex, $2 = pattern, $3 = nick, [$4 = hash] # this routine wont clean after itself. the calling procedure must do it. ALIAS _proc.inv (chan,serv,opat,nick,phash) { @ :patt = (pass(!@ $opat) == [!]) ? opat : uhc($opat); @ :hash = phash ? phash : hash_32bit($chan); @ :list = [I] ## serv ## [-] ## hash; @ :invx = getrmatches($list $patt); @ :invy = getmatches($list $patt); @ :invs = uniq($invx $invy); FE ($invs) inv { @ :str = getitem($list $inv); _proc.mode_add $serv $chan -I $str; }; _proc.mode_add $serv $chan +I $patt; _proc.mode_flush $serv $chan; }; #tjh/09 lice5/lice/lice.define0000644000175000017500000000265612715251177013250 0ustar timtim# # IRC Script Program. For use with ircii-EPIC5 clients. # Copyright (C) 2000 SrfRoG (cag@codehack.com) # # --------------------------------------------------------------------------- # All code by SrfRoG, unless specified. Visit https://lice.muppetz.com # --------------------------------------------------------------------------- # Updated for EPIC5 by tjh IF (word(2 $loadinfo()) != [pf]) { LOAD -pf $word(1 $loadinfo()); RETURN; }; PACKAGE LiCe; ALIAS define { UNLESS (@) { uecho Usage: /DEFINE ; RETURN; }; @ :def.text = ["$*"]; @ :def.fd = connect(dict.org 2628); WAIT =$def.fd; UNLESS (def.fd) { XECHO -B Connection failed.; RETURN; }; ^ON ^DCC_RAW "$def.fd % D 150 *" { @ :str = [$4 definition] ## plural($4) ## [ retrieved]; @ :wid = (word(0 $geom()) - 3) - strlen($str); @ :wid /= 2; XECHO -C $repeat($wid #) $str $repeat($wid #)\; }; ^ON ^DCC_RAW "$def.fd % D 151 *" {XECHO -C $chop(1 $4-)}; ^ON ^DCC_RAW "$def.fd % D 552 *" {XECHO -C $banner No definition found.}; ^ON ^DCC_RAW "$def.fd % D *" {UNLESS (isdigit($3)) {XECHO -C $chop(1 $3-)}}; ^ON ^DCC_RAW "$def.fd % C" { ^ON ^DCC_RAW -"$0 % D 150 *"; ^ON ^DCC_RAW -"$0 % D 151 *"; ^ON ^DCC_RAW -"$0 % D 552 *"; ^ON ^DCC_RAW -"$0 % D *"; ^ON ^DCC_RAW -"$0 % C"; }; ^DCC RAW $def.fd dict.org DEFINE * $def.text; ^DCC RAW $def.fd dict.org QUIT; }; ALIAS dict {define $*}; #tjh/09 lice5/lice/lice.et0000644000175000017500000000201712715251177012415 0ustar timtim# # IRC Script Program. For use with ircii-EPIC5 clients. # Copyright (C) 2000 SrfRoG (cag@codehack.com) # # --------------------------------------------------------------------------- # lice.et written by tjh for LiCe5 for EPIC5. tjh - tim@muppetz.com # https://lice.muppetz.com - LiCe5+ # --------------------------------------------------------------------------- # IF (word(2 $loadinfo()) != [pf]) { LOAD -pf $word(1 $loadinfo()); RETURN; }; PACKAGE LiCe; ALIAS et { IF (!windowctl(GET 0 CHANNELS)) { XECHO -B You're not on a channel in this window.; }{ IF (!ischanop($servernick() $C)) { XECHO -B $C: You're not channel operator; }{ ^PARSEKEY ERASE_LINE; @ topic = ischannel($0) ? afterw($0 $chan_topic[$chanwin($0)$hash_32bit($0)]) : afterw($C $chan_topic[$chanwin($C)$hash_32bit($C)]); @ lchan = ischannel($0) ? *0 : C; INPUT "Topic: " IF ((@) && [$*] != [$topic]) { TOPIC $lchan $*; }; XTYPE -literal $topic; } }; }; }; #tjh/15 lice5/lice/lice.db0000644000175000017500000000567412715251177012406 0ustar timtim# # IRC Script Program. For use with ircii-EPIC5 clients. # Copyright (C) 2000 SrfRoG (cag@codehack.com) # # --------------------------------------------------------------------------- # lice.db written by tjh for LiCe5.2.0+ for EPIC5. tjh - tim@muppetz.com # # This file opens the database file in which variables are stored and creates # some aliases to easily manage the variables in the DB. # It also handles the reload of all settings (lice.load_db) # # Autosave of # * /SETs # * /IGNOREs # * /SERVERs # * /NOTIFYs # * LiCe Script Settings # # is handled by this file. # # https://lice.muppetz.com - LiCe5 # --------------------------------------------------------------------------- # IF (word(2 $loadinfo()) != [pf]) { LOAD -pf $word(1 $loadinfo()); RETURN; }; PACKAGE LiCe; @ mkdir($lice.save_path); # open database @ lice.fd = dbmctl(OPEN STD $(lice.save_path)/lice.db); # check we got the db open and if not, die. IF (lice.fd == -1) { CLEAR; XECHO; XECHO [LiCe System Message]; XECHO; XECHO ERROR: Unable to open $(lice.save_path)/lice.db - Please check this path is valid!; XECHO ; XECHO Unable to continue.; XECHO ; XECHO 5Exiting in 5 seconds.; ^PAUSE 5; //^QUIT; }; ### database routines ALIAS lice.add (varname, data) {@ dbmctl(ADD $lice.fd "$tolower($varname)" $data)}; ALIAS lice.set (varname, data) {@ dbmctl(CHANGE $lice.fd "$tolower($varname)" $data)}; ALIAS lice.get (varname) {@ FUNCTION_RETURN = dbmctl(READ $lice.fd "$tolower($varname)")}; ALIAS lice.del (varname) {@ dbmctl(DELETE $lice.fd "$tolower($varname)")}; # Small alert if the DB is still open. IF (lice.get(db.status) == 1) {TIMER 2 uecho Warning: The LiCe database is already marked open! Are you already running LiCe?}; # mark database as open @lice.set(db.status 1); # Erase old client state @lice.del(*CLIENT_INFORMATION); # Read all sets, ignores, chanlog assigns and servers from the database. ALIAS lice.load_db { FE ($numsort($dbmctl(ALL_KEYS $lice.fd))) dbi { SWITCH ($left(1 $dbi)) { (\\*) { @ :val = lice.get($dbi); @ :set = after(* $dbi); IF ((getsets($set)) && (val != [])) {//^SET $set $val}; }; (|) {//^IGNORE $lice.get($dbi)}; (!) {_proc.startlog $lice.get($dbi)}; (&) {//^SERVER -ADD $lice.get($dbi)}; }; }; }; # save servers routine ALIAS lice.saveservers { FE ($dbmctl(ALL_KEYS $lice.fd)) ls { UNLESS (strlen($after(& $ls)) == 0) { @lice.del($ls); }; }; FE ($numsort($serverctl(GMATCH *))) id { # work around epic5 bug - $serverctl(GMATCH *)) currently returns servers that have been deleted! IF (serverctl(GET $id NAME)) { @lice.add(&server$(id) $serverctl(GET $id FULLDESC)); }; }; }; # Auto save of notify ALIAS notify { //NOTIFY $*; @lice.set (lice.notify $notify()); }; # Auto save of servers ALIAS server { //SERVER $*; IF (rmatch($0 -D* -U* -A*)) {lice.saveservers}; }; ^ON ^CONNECT * {^TIMER 5 {lice.saveservers}}; #tjh/15 lice5/lice/lice.refriend0000644000175000017500000000167712715251177013616 0ustar timtim# # IRC Script Program. For use with ircii-EPIC5 clients. # Copyright (C) 2000 SrfRoG (cag@codehack.com) # # --------------------------------------------------------------------------- # All code by HSOC, unless specified. Visit https://lice.muppetz.com # --------------------------------------------------------------------------- # Updated for EPIC5 by tjh. This code is written by HSOC. IF (word(2 $loadinfo()) != [pf]) { LOAD -pf $word(1 $loadinfo()); RETURN; }; PACKAGE LiCe; ALIAS reuser {refriend $*}; ALIAS refriend { @ :fr_chan = @ ? [$0] : [$C]; IF (!ischanop($servernick() $fr_chan)) {RETURN}; @ :fr_hash = hash_32bit($fr_chan); @ fr_list = []; FE ($channel($fr_chan)) fr_1 { @ :fr_nick = rest(2 $fr_1); @ :fr_mode = get_cookie(User $fr_chan $fr_nick $fr_hash); IF ((fr_mode & 32) && (left(1 $fr_1) != [@])) {PUSH fr_list $fr_nick}; }; _proc.loop_mode $winserv() + o $fr_chan fr_list; purge fr; }; #tjh/09 lice5/lice/lice.looplist0000644000175000017500000000340212715251177013651 0ustar timtim# # IRC Script Program. For use with ircii-EPIC5 clients. # Copyright (C) 2000 SrfRoG (cag@codehack.com) # # --------------------------------------------------------------------------- # All code by SrfRoG, unless specified. Visit https://lice.muppetz.com # --------------------------------------------------------------------------- # Updated for EPIC5 by tjh IF (word(2 $loadinfo()) != [pf]) { LOAD -pf $word(1 $loadinfo()); RETURN; }; PACKAGE LiCe; # $0 = server, $1 = channel, $2 = nick list, $3 = kick reason. # this routine cleans up after itself ALIAS _proc.loop_kick { ^LOCAL kick.l $($2); ^LOCAL kick.m $($3); FE ($kick.l) kick.1 { _proc.quote_add $0 KICK $1 $kick.1 :$kick.m; }; _proc.quote_flush $0; ^ASSIGN -$2; ^ASSIGN -$3; }; # $0 = server, $1 = mode, $2 = type, $3 = channel, $4 = nicks # this routine cleans up after itself ALIAS _proc.loop_mode { ^LOCAL lm.str; ^LOCAL lm.lst $($4); FE ($lm.lst) lm.1 { PUSH lm.str $lm.1; IF (#lm.str == lice.get(main.mnm)) { _proc.quote_add $0 MODE $3 $1$repeat($lice.get(main.mnm) $2) $lm.str; @ :lm.str = []; }; }; IF (strlen($lm.str)) {_proc.quote_add $0 MODE $3 $1$repeat($#lm.str $2) $lm.str}; _proc.quote_flush $0; ^ASSIGN -$4; }; # $0 = server, $1 = NOTICE/PRIVMSG, $2 = nicks, $3 = msg # this routine cleans up after itself ALIAS _proc.loop_send { ^LOCAL msg.nicks $($2); ^LOCAL msg.msg $($3); ^LOCAL msg.send; FE ($msg.nicks) msg.1 { @ :msg.send #= msg.1 ## [,]; IF (#split(, $msg.send) == lice.get(main.mns)) { _proc.quote_add $0 $1 $msg.send :$msg.msg $chr(18)$rand(999); @ :msg.send = []; }; }; IF (strlen($msg.send)) {_proc.quote_add $0 $1 $msg.send :$msg.msg}; _proc.quote_flush $0; ^ASSIGN -$2; ^ASSIGN -$3; }; #tjh/15 lice5/lice/lice.show_list0000644000175000017500000000267512715251177014032 0ustar timtim# # IRC Script Program. For use with ircii-EPIC5 clients. # Copyright (C) 2000 SrfRoG (cag@codehack.com) # # --------------------------------------------------------------------------- # All code by SrfRoG, unless specified. Visit https://lice.muppetz.com # --------------------------------------------------------------------------- # Updated for EPIC5 by tjh IF (word(2 $loadinfo()) != [pf]) { LOAD -pf $word(1 $loadinfo()); RETURN; }; PACKAGE LiCe; ALIAS _proc.show_list { IF ([$2]==[-f]) { MODE ${ischannel($3)?[$3]:C} +$1; RETURN; }; @ :chan = ischannel($2) ? [$2] : C; UNLESS (onchannel($N $chan)) { MODE $chan +$1; RETURN; }; @ :list = left(1 $0) ## winserv() ## [-] ## hash_32bit($chan); IF (numitems($list) <= 0) { XECHO -B No $0s found on $chan\.; RETURN; }; IF ([$0] == [Ban]) { cecho ---------- Channel $ch($chan) $0list ----------; FOR (@ :cnt=0, numitems($list) > cnt, @cnt++) { @ :str = getitem($list $cnt); IF (!ismset(V) && pass(! $word(2 $str))) {@ :str = sar(/$word(2 $str)/$before(! $word(2 $str))/$str)}; cecho [$[2]{cnt + 1}] $str; }; }{ cecho ---------- Channel $ch($chan) $0list ----------; FOR (@ :cnt=0, numitems($list) > cnt, @cnt++) { @ :str = getitem($list $cnt); cecho [$[2]{cnt + 1}] $str; }; }; }; ALIAS sb {_proc.show_list Ban b $*}; ALIAS se {_proc.show_list Exc e $*}; ALIAS si {_proc.show_list Inv I $*}; #tjh/09 lice5/lice/lice.pic0000644000175000017500000000270312715251177012562 0ustar timtim# # IRC Script Program. For use with ircii-EPIC5 clients. # Copyright (C) 2000 SrfRoG (cag@codehack.com) # # --------------------------------------------------------------------------- # Description : ASCII pics for LiCe # Sources : kendi/mozy, CKeeper, alt.ascii.cow, DeadelviS. # Code : SrfRoG (cag@codehack.com) # --------------------------------------------------------------------------- # Updated for EPIC5 by tjh IF (word(2 $loadinfo()) != [pf]) { LOAD -pf $word(1 $loadinfo()); RETURN; }; PACKAGE LiCe; ALIAS PIC { IF (@) { @ :pic.trg = strlen($1) ? [$1] : C; @ :pic.file = which($LiCePath/pics/$0); UNLESS (strlen($pic.file)) {RETURN}; @ :pic.fd = open($pic.file R); UNLESS (pic.fd) { XECHO -B Could not open "$0\"; RETURN; }; UNTIL (eof($pic.fd)) { @ :pic.str = read($pic.fd); IF (pic.str) {MSG $pic.trg $pic.str}; }; @ close($pic.fd); IF (strlen($2)) {MSG $pic.trg ** $2-} }{ IF (fexist($LiCePath/pics) == 1) { CD $LiCePath/pics; @ :pic.list = glob(*); ^CD ~; UNLESS (strlen($pic.list)) { XECHO -B No pictures found; RETURN; }; iecho Your picture collection:; echo.recursive $pic.list; uecho Usage: /PIC [target] [message]; }{ XECHO -B Path not found: $LiCePath/pics; IF (mkdir($LiCePath/pics)) { XECHO -B Failed to create: $LiCePath/pics; }; }; }; }; #tjh/12 lice5/lice/lice.msay0000644000175000017500000000205312715251177012756 0ustar timtim# # IRC Script Program. For use with ircii-EPIC5 clients. # Copyright (C) 2000 SrfRoG (cag@codehack.com) # # --------------------------------------------------------------------------- # All code by SrfRoG, unless specified. Visit https://lice.muppetz.com # --------------------------------------------------------------------------- # Updated to support all servers by tjh 14/5/2012 IF (word(2 $loadinfo()) != [pf]) { LOAD -pf $word(1 $loadinfo()); RETURN; }; PACKAGE LiCe; ALIAS msay { SWITCH ($0) { () {uecho Usage: /MSAY [-a] }; (-a) { FOR serv from 0 to $serverctl(MAX) { IF (serverctl(GET $serv CONNECTED)) { @ msay_list = mychannels($serv); ^ASSIGN msay_send $1-; _proc.loop_send $serv PRIVMSG msay_list msay_send; }; }; ECHO $fmt.send_public(ALL/#* $1-); }; (*) { @ msay_list = mychannels(); ^ASSIGN msay_send $*; _proc.loop_send $winserv() PRIVMSG msay_list msay_send; ECHO $fmt.send_public(#* $*); }; }; }; #tjh/12 lice5/lice/lice.ulw_whoami0000644000175000017500000000317712715251177014170 0ustar timtim# # IRC Script Program. For use with ircii-EPIC5 clients. # Copyright (C) 2000 SrfRoG (cag@codehack.com) # # --------------------------------------------------------------------------- # All code by SrfRoG, unless specified. Visit https://lice.muppetz.com # --------------------------------------------------------------------------- # Updated for EPIC5 by tjh IF (word(2 $loadinfo()) != [pf]) { LOAD -pf $word(1 $loadinfo()); RETURN; }; PACKAGE LiCe; # !WHOAMI command ALIAS _proc.ulw_whoami (nick,uh,serv,pass,void) { @ :myhand = find_in_list(User $nick!$uh); UNLESS (myhand) {RETURN}; FE ($myhand) hand { UNLESS (lice.get(main_PL$hand)) { XQUOTE -S $serv NOTICE $nick :You don't have a password set. Type: /MSG $servernick($serv) !HELP PASS; RETURN; }; IF (pass != lice.get(main_PL$hand)) { XQUOTE -S $serv NOTICE $nick :Invalid password. $randread($main.reason_error); RETURN; }; FOR (@:cnt=0, numitems(Userlist) > cnt, @ :cnt++) { @ :hn = getitem(Userlist $cnt); @ :hash = hash_32bit($hn); IF (hash == hand) { @ :handle = hn; BREAK; }; }; _proc.quote_add $serv NOTICE $nick :That host matches handle '$handle\'; @ :host = numitems(User$hand); FOR (@ :cnt=0, host > cnt, @ cnt++) { _proc.quote_add $serv NOTICE $nick :+ Host ${cnt + 1}: $getitem(User$hand $cnt); }; @ :chan = numitems(ChanUser$hand); FOR (@ :cnt=0, chan > cnt, @ cnt++) { @ :item = getitem(ChanUser$hand $cnt); @ :mode = _proc.ul_m2a(User $word(1 $item)); _proc.quote_add $serv NOTICE $nick :+ Chan ${cnt + 1}: $word(0 $item) | Mode: +$mode; }; }; _proc.quote_flush $serv; }; #tjh/09 lice5/lice/lice.banlist0000644000175000017500000000564512715251177013453 0ustar timtim# # IRC Script Program. For use with ircii-EPIC5 clients. # Copyright (C) 2000 SrfRoG (cag@codehack.com) # # --------------------------------------------------------------------------- # All code by SrfRoG, UNLESS specified. Visit https://lice.muppetz.com # --------------------------------------------------------------------------- # Updated for EPIC5 by tjh IF (word(2 $loadinfo()) != [pf]) { LOAD -pf $word(1 $loadinfo()); RETURN; }; PACKAGE LiCe;; ### Ban manipulation routines. ALIAS ban { UNLESS (@) { uecho Usage: /BAN [-a|-c|-h|-i|-f|-g|-p|-n|-u|-t ] ; uecho Usage: /BAN ; RETURN; }; @ :uban = lice.get(main.auto_unban); IF ([$2]) {^ASSIGN stampa 2}; WHILE (option = getopt(optopt optarg "achifgpsnt:u" $*)) { SWITCH ($option) { (a) {@ :type = strip(AU $type) ## [A]}; (i) {@ :type = strip(AI $type) ## [I]}; (c) {@ :type = strip(CHFPGSN $type) ## [C]}; (h) {@ :type = strip(HCFPGSN $type) ## [H]}; (f) {@ :type = strip(HFCPGSN $type) ## [F]}; (g) {@ :type = strip(HFCPGSN $type) ## [G]}; (p) {@ :type = strip(HFCPGSN $type) ## [P]}; (s) {@ :type = strip(HFCPGSN $type) ## [S]}; (n) {@ :type = strip(NFHCPGS $type) ## [N]}; (u) {@ :type = strip(UNA $type) ## [U]}; (t) {@ :uban = pass(0123456789 $optarg)}; }; }; UNLESS (strlen($type)) {@ :type = [N]}; @ :serv = winserv(); @ :old_uban = lice.get(main.auto_unban); @lice.set(main.auto_unban $uban); FE ($optarg) whom { IF (pass(!@. $whom)) { _proc.ban $C $serv $whom %; CONTINUE; }; @ :uh = get_uh($whom); UNLESS (strlen($uh)) { XECHO -B $whom: No such nick; CONTINUE; }; FEC ($type) opt { @ :ban = makeban(B$opt $whom!$uh); _proc.ban $C $serv $ban $whom; }; }; @lice.set(main.auto_unban $old_uban); }; # $0 = channel, $1 = serverindex, $2 = pattern, $3 = nick, [$4 = hash] ALIAS _proc.ban (chan,serv,opat,nick,phash) { @ :patt = uhc($opat); IF (patt == [*!*@*.*]) {RETURN}; XEVAL -S $serv { get_user_match $chan $patt temp_list; FE ($remw($servernick($serv) $temp_list)) ban { IF (ischanop($ban $chan)) {_proc.mode_add $serv $chan -o $ban}; }; }; ^ASSIGN -temp_list; @ :hash = phash ? phash : hash_32bit($chan); @ :list = [B] ## serv ## [-] ## hash; @ :banx = getrmatches($list $patt); @ :bany = getmatches($list $patt*); @ :bans = uniq($banx $bany); @ :lame = 0; FE ($bans) ban { @ :str = word(0 $getitem($list $ban)); IF (str == patt) {@ :lame = 1}{_proc.mode_add $serv $chan -b $str}; }; UNLESS (lame) {_proc.mode_add $serv $chan +b $patt}; IF (stampa) { ^TIMER $stampa _proc.mode_flush $serv $chan; ^TIMER $stampa ^ASSIGN -stampa; }{_proc.mode_flush $serv $chan}; IF (lice.get(main.auto_unban) > 0) { @ setitem(AUTOUNBAN $numitems(AUTOUNBAN) ${time() + lice.get(main.auto_unban)} $serv $chan $patt); }; }; #tjh/15 lice5/lice/lice.wtog0000644000175000017500000000653212715251177012773 0ustar timtim# # IRC Script Program. For use with ircii-EPIC5 clients. # Copyright (C) 2000 SrfRoG (cag@codehack.com) # # --------------------------------------------------------------------------- # All code by SrfRoG, unless specified. Visit https://lice.muppetz.com # --------------------------------------------------------------------------- # # Modified by tjh 2010 # IF (word(2 $loadinfo()) != [pf]) { LOAD -pf $word(1 $loadinfo()); RETURN; }; PACKAGE LiCe; ALIAS _proc.setup_wtog { iecho +---- Current LiCe Window Toggle Settings -----------------------+; iecho | Description | Tog | Set | Default |; iecho +------------------------------------------+-----+-----+---------+; iecho Allow seperate dedicated windows.(/WTOG CW)| A | $[3]isset.show($iswset(A)) | Off; iecho Always allow beeps on hidden windows. | B | $[3]isset.show($iswset(B)) | Off; iecho Dedicated DCC CHAT window. | C | $[3]isset.show($iswset(C)) | Off; iecho Use double status bars in new windows. | D | $[3]isset.show($iswset(D)) | On; iecho Dedicated DCC transfer Status window. | E | $[3]isset.show($iswset(E)) | Off; iecho Use the global status titlebar. | T | $[3]isset.show($iswset(T)) | On; iecho Dedicated MSG window. No-scroll MSG reading| W | $[3]isset.show($iswset(W)) | Off; INPUT "Letters to change toggles (ENTER to skip): " IF (@) {wtog $*} }; ALIAS wtog { UNLESS (@) { _proc.setup_wtog; RETURN; }; FEC ($toupper($0)) _t { IF (iswset($_t)) { @ lice.set(main.wset $strip($_t $lice.get(main.wset))); if (_t == [C]) {//^WINDOW SHOW CW KILL;//^WINDOW LEVEL ALL}; if (_t == [T]) { FE ($windowctl(REFNUMS)) wn {WINDOW $wn TOPLINES 0}; }; if (_t == [E]) {//^WINDOW SHOW SDCC KILL;//^WINDOW LEVEL ALL}; if (_t == [W]) {//^WINDOW SHOW MW KILL;//^WINDOW LEVEL ALL}; }{ @ lice.set(main.wset $pass(ABCDETW $lice.get(main.wset) $_t)); if (_t == [C]) { IF (iswset(A)) { win_new CW; //^WINDOW LEVEL NONE DOUBLE OFF NOSERV STATUS_FORMAT " [Win: %W%R%F] Chat Window %>-- Type /WTOG C to finish -- "; }{ //^WINDOW NEW NAME CW LEVEL NONE DOUBLE OFF SIZE 8 NOSERV STATUS_FORMAT " Chatting Window %>-- Type /WTOG C to finish -- ";//^WINDOW LAST;//^WINDOW LEVEL ALL; }; }; if (_t == [T]) { $_proc.redraw_tl(1); }; if (_t == [E]) {//^WINDOW NEW NAME SDCC LEVEL NONE DOUBLE OFF SIZE 8 NOSERV STATUS_FORMAT " DCC transfer Status Window %>-- Type /WTOG E to finish -- ";//^WINDOW LAST;//^WINDOW LEVEL ALL}; if (_t == [W]) { IF (iswset(A)) { win_new MW; //^WINDOW LEVEL NONE DOUBLE OFF NOSERV STATUS_FORMAT " [Win: %W%R%F] Message Window %>-- Type /WTOG W to finish -- "; }{ //^WINDOW NEW NAME MW LEVEL NONE DOUBLE OFF SIZE 8 NOSERV STATUS_FORMAT " Message Window %>-- Type /WTOG W to finish -- ";//^WINDOW LAST;//^WINDOW LEVEL ALL; }; }; }; }; UNLESS (lice.get(main.wset)) {@lice.del(main.wset)}; XECHO -B Window toggles now: $lice.get(main.wset); }; #tjh/09 lice5/lice/lice.dns0000644000175000017500000000206512715251177012574 0ustar timtim# # IRC Script Program. For use with ircii-EPIC5 clients. # Copyright (C) 2000 SrfRoG (cag@codehack.com) # # --------------------------------------------------------------------------- # All code by SrfRoG, unless specified. Visit https://lice.muppetz.com # --------------------------------------------------------------------------- # Updated for EPIC5 by tjh IF (word(2 $loadinfo()) != [pf]) { LOAD -pf $word(1 $loadinfo()); RETURN; }; PACKAGE LiCe; # Description: converts from IP -> hostname and viceversa alias _proc.dns_result (adr) { @ :res = convert($adr); IF (temp.whois_away > 0) { ECHO $fmt.whois_mid(Nslookup ${res?res:[Unknown]}); }{ iecho $adr is ${res?res:[Unknown]}; }; }; alias dns { UNLESS (@) { uecho Usage: /DNS < nick | [host | ip address] >; RETURN; }; ^LOCAL who $0; IF (match(*.* $who)) { _proc.dns_result $who; }{ USERHOST $who -CMD IF ([$4]!=[]) { _proc.dns_result $4; }{ XECHO -B $who\: nick not online.; }; }; }; ALIAS findip {dns $*}; ALIAS nsl {dns $*}; #tjh/09 lice5/lice/lice.serverignore0000644000175000017500000000410512715251177014517 0ustar timtim# # IRC Script Program. For use with ircii-EPIC5 clients. # Copyright (C) 2014 tjh (tim@muppetz.com) # # --------------------------------------------------------------------------- # All code by tjh, unless specified. Visit https://lice.muppetz.com # --------------------------------------------------------------------------- # Silence originally written by HSOC, heavily modified to support silence toggle by tjh # CallerID/Accept support added by tjh IF (word(2 $loadinfo()) != [pf]) { LOAD -pf $word(1 $loadinfo()); RETURN; }; PACKAGE LiCe; ### Silence ALIAS silence { UNLESS (_proc.silence()) {iecho $S does not support silence.;RETURN}; IF (match($left(1 $0) + -)) { @ sil.sign = left(1 $0); @ sil.dork = rest(1 $0); UNLESS (rmatch($0 *!* *@* *.*)) { USERHOST $sil.dork -CMD UNLESS ([$4]==[] || [$4]==[]) { //SILENCE $sil.sign*@$4; //SILENCE $sil.sign$sil.dork*; }{//SILENCE $sil.sign$sil.dork*} }{//SILENCE $0} }{ @ sil.cnt = 1; @ sil.pers = (@ ? [$0] : [$N]); iecho ---- Silence List for $sil.pers@$S; ^ON ^271 * { @ sil.mask = [$2]; iecho [$[2]sil.cnt] $sil.mask; @sil.cnt++; }; //SILENCE $sil.pers; }; }; ON ^272 * { iecho ---- End of Silence List; purge sil; }; ### CallerID / Accept (usermode +g) ALIAS accept { UNLESS (_proc.callerid()) {iecho $S does not support callerid.;RETURN}; UNLESS (rmatch($0 -L -A -D)) { uecho Usage: /ACCEPT -l; uecho Usage: /ACCEPT -a ; uecho Usage: /ACCEPT -d ; RETURN; }{ SWITCH ($0) { (-A) {XQUOTE ACCEPT $unsplit(, $1-)}; (-D) {XQUOTE ACCEPT -$sar(g/,/,-/$unsplit(, $1-))}; }; iecho Accept List for $N; ^ON ^281 * {XECHO $fmt.sc_mid($1-)}; ^ON ^282 * { ^ON ^281 -}; XQUOTE ACCEPT *; }; }; ALIAS _proc.silence {@:FUNCTION_RETURN = (MATCH(SILENCE $serverctl(GET $serverctl(FROM_SERVER) 005s))) > 0): 0 ? 1}; ALIAS _proc.callerid {@:FUNCTION_RETURN = (MATCH(CALLERID $serverctl(GET $serverctl(FROM_SERVER) 005s))) > 0): 0 ? 1}; #tjh/16 lice5/lice/lice.chanlog0000644000175000017500000000547412715251177013432 0ustar timtim# # IRC Script Program. For use with ircii-EPIC5 clients. # Copyright (C) 2000 whitefang (thall@magenet.com) - Broken email. # # --------------------------------------------------------------------------- # All code by whitefang, unless specified. Visit http://wolf.magenet.com # --------------------------------------------------------------------------- # # Prior to LiCe 5.3 this file was taken from whitefang's wolf addon for LiCe4 # Since LiCe 5.3 we now use epic5's built in logging function. # IF (word(2 $loadinfo()) != [pf]) { LOAD -pf $word(1 $loadinfo()); RETURN; }; PACKAGE LiCe; # Setup logging @ mkdir($lice.save_path/logs); SET NO_CONTROL_LOG OFF; ALIAS chanlog { UNLESS (@) { uecho Usage: /CHANLOG -a ; uecho Usage: /CHANLOG -d ; uecho Usage: /CHANLOG -l; RETURN; }; @ :opts = []; WHILE (opts = getopt(optopt optarg "a:d:l::" $*)) { @ :chan = stripcrap(ALL $optarg); UNLESS (ischannel($chan)) {@ :chan = [#] ## chan}; @ :hash = hash_32bit($chan); SWITCH ($opts) { (a) { IF (lice.get(![$hash][C]) == [$chan]) { iecho Already logging $chan; RETURN; }; _proc.startlog $chan; @lice.set(![$hash][C] $chan); iecho Chanlog: logging $chan to $lice.save_path/logs/$tolower($chan)\.log; }; (d) { UNLESS (lice.get(![$hash][C]) == [$chan]) { iecho $chan isn't being logged, unable to delete; RETURN; }; FE ($logctl(REFNUMS ALL)) logs { IF ((logctl(GET $logs NAME)) == [$chan]) { @ :rmlog = logs; CONTINUE; }; }; //^LOG $rmlog KILL; @lice.del(![$hash][C]); iecho Chanlog: no longer logging $chan; }; (l) { iecho +$repeat(5 -) Logging $repeat(2 -)+$repeat(51 -)+$repeat(14 -)+; iecho | Channel $repeat(6 ) | Path $repeat(44 ) | Size $repeat(8 )|; iecho +$repeat(16 -)+$repeat(51 -)+$repeat(14 -)+; FE ($logctl(REFNUMS ALL)) logs { @ :chan = logctl(GET $logs NAME); @ :file = lice.save_path ## [/logs/] ## tolower($chan) ## [\.log]; @ :pad1 = (15 - strlen($chan)); @ :pad2 = (50 - strlen($file)); iecho $logctl(GET $logs NAME) $repeat($pad1 ) $file $repeat($pad2 ) $fsize($file); }; }; }}; }; }; ALIAS _proc.startlog (channel) { //^LOG NEW NAME $channel FILENAME $lice.save_path/logs/$tolower($channel)\.log ADD $channel MANGLE ALL SERVER -2 REWRITE "$$strftime($lice.get(main.tsfmt)) $$1-" ON; }; ALIAS _proc.uplogtsfmt { FE ($logctl(REFNUMS ALL)) logs { //^LOG $logs REWRITE "$$strftime($lice.get(main.tsfmt)): $$1-"; }; }; #Hacked into LiCe beautifully, before epic supported logging, by tjbh/2000 - wolf script #Rewrite for epic's built-in logging by tjh #tjh/14 lice5/lice/lice.ulw_chat0000644000175000017500000000207012715251177013612 0ustar timtim# # IRC Script Program. For use with ircii-EPIC5 clients. # Copyright (C) 2000 SrfRoG (cag@codehack.com) # # --------------------------------------------------------------------------- # All code by SrfRoG, unless specified. Visit https://lice.muppetz.com # --------------------------------------------------------------------------- # Updated for EPIC5 by tjh IF (word(2 $loadinfo()) != [pf]) { LOAD -pf $word(1 $loadinfo()); RETURN; }; PACKAGE LiCe; # !CHAT command ALIAS _proc.ulw_chat (nick,uh,serv,pass,text) { @ :myhand = find_in_list(User $nick!$uh); UNLESS (myhand) {RETURN}; FE ($myhand) hand { UNLESS ($lice.get(main_PL$hand)) { XQUOTE -S $serv NOTICE $nick :You don't have a password set. Type: /MSG $servernick($serv) !HELP PASS; RETURN; }; IF (pass != lice.get(main_PL$hand)) { XQUOTE -S $serv NOTICE $nick :Invalid password. $randread($main.reason_error); RETURN; }; XEVAL -S $serv { TIMER -REF $hand $rand(9) //^DCC CHAT $nick; QUOTE NOTICE $nick :DCC CHAT request sent. Type: /DCC CHAT $N; }; }; }; #tjh/09 lice5/lice/lice.epic50000644000175000017500000005561412715251177013025 0ustar timtim# This is just a bunch of the default scripts that came with epic5-1.0 # Original authors names are intact and I claim no credit for this. # Thanks to all the epic contributors for this. # # The copyrights are all intact but I have removed all extra comments. # tjh/14 if (word(2 $loadinfo()) != [pf]) { load -pf $word(1 $loadinfo()); return; }; # Silence DCC Noise! ^ON ^WINDOW '% \$BANNER A\ non-blocking\ connect*' #; # Written by David B. Kratter (BlackJac@EFNet) # Version: 1.0.2005.06.25.1 alias addset (name, type, ...) { if (@name && type) { @ symbolctl(create $name); @ symbolctl(set $name 1 builtin_variable type $type); if (@) { @ symbolctl(set $name 1 builtin_variable script $*); }; }; }; alias delset (name, void) { if (@name) { @ symbolctl(delete $name builtin_variable); @ symbolctl(check $name); }; }; # Copyright (c) 2007 BlackJac@EFNet # Version: 1.2.2007.09.28.1 alias history (index, void) { xecho -b -c Command History:; if (index > (:numitems = numitems(array.history)) || !index) { @ index = numitems; }; if (index > 0) { fe ($jot(0 ${index - 1} 1)) hh { @ :item = getitem(array.history $hh); xecho -c $hh${getset(history_timestamp) == 'on' ? " \[$word(3 $stime($word(0 $item)))\] " : "\: "}$restw(1 $item); }; }; }; alias history.add (...) { if (@) { if (getset(history_remove_dupes) == 'on') { @ delitems(array.history $getmatches(array.history % $*)); @ delitems(array.history $getmatches(array.history % $* )); }; if (numitems(array.history) == history) { @ delitem(array.history 0); }; @ setitem(array.history $numitems(array.history) $time() $*); @ history.index = ''; }; }; alias history.erase (void) { @ history.index = ''; parsekey reset_line; }; alias history.get (direction, void) { if (direction == 1) { if (@L && @history.index == 0) { history.add $L; }; if ((history.index == (:numitems = numitems(array.history) - 1) || @history.index == 0)) { if (getset(history_circleq) == 'on') { history.show 0; } else { history.erase; }; } else if (history.index < numitems && @history.index) { history.show ${history.index + 1}; }; } else if (direction == -1) { if (@L && @history.index == 0) { history.add $L; @ history.index = numitems(array.history) - 1; }; if ((history.index == 0 && getset(history_circleq) == 'on') || @history.index == 0) { history.show ${numitems(array.history) - 1}; } else if (history.index > 0) { history.show ${history.index - 1}; }; }; }; alias history.shove (void) { history.add $L; parsekey reset_line; }; alias history.show (index, void) { if (@index) { @ history.index = index; parsekey reset_line $restw(1 $getitem(array.history $history.index)); }; }; alias historyctl (action, ...) { switch ($action) { (add) { if (history) { history.add $*; return 1; }; return 0; }; (delete) { @ delitem(array.history $0); }; (get) { return $restw(1 $getitem(array.history $0)); }; (index) { if (strlen($getitem(array.history $0))) { @ history.index = *0; return 1; }; return 0; }; (read) { if ((:fd = open("${*0 ? *0 : getset(history_save_file)}" R)) > -1) { while (:line = read($fd)) { if (numitems(array.history) == history) { @ delitem(array.history 0); }; @ setitem(array.history $numitems(array.history) $line); }; @ close($fd); return $fd; }; }; (reset) { @ history.index = ''; @ delarray(array.history); }; (save) { if ((:fd = open("${*0 ? *0 : getset(history_save_file)}" W)) > -1) { fe ($jot(0 ${numitems(array.history) - 1} 1)) hh { @ write($fd $getitem(array.history $hh)); }; @ close($fd); return $fd; }; }; (set) { ^set history $0; return 1; }; }; }; alias sendline (...) { if (@) { history.add $*; //sendline $*; }; }; @ bindctl(function BACKWARD_HISTORY create "history.get -1"); @ bindctl(function ERASE_HISTORY create history.erase); @ bindctl(function FORWARD_HISTORY create "history.get 1"); @ bindctl(function SHOVE_TO_HISTORY create history.shove); fe (N [OB [[B) hh { @ bindctl(sequence ^$hh set forward_history); }; fe (P [OA [[A) hh { @ bindctl(sequence ^$hh set backward_history); }; @ bindctl(sequence ^U set erase_history); ^on ^input "/!*" { @ :find = after(! $0); if (isnumber($find)) { if (:found = getitem(array.history $find)) { xtype -l $restw(1 $found)${*1 ? "$1-" : ""}; } else { xecho -b -c No such history entry: $find; }; } else if (:found = getmatches(array.history % /$find*) ## ' ' ## getmatches(array.history % $find*)) { @ :index = rightw(1 $numsort($found)); if (getset(history_save_position) == 'on') { @ history.index = index; }; xtype -l $restw(1 $getitem(array.history $index))${*1 ? " $1-" : ""}; } else { xecho -b -c No match; }; }; addset history int { if (*0 == 0) { @ delarray(array.history); @ history.index = ''; ^bind ^] nothing; ^on #input 2 -"*"; ^on #input 2 -"/!*"; } else if (@) { if (numitems(array.history) > history) { until (numitems(array.history) == history) { @ delitem(array.history 0); }; }; ^bind ^] shove_to_history; ^on #-input 2 "*" { history.add $*; }; ^on #-input 2 "/!*" #; }; }; set history 150; addset history_circleq bool; set history_circleq on; addset history_persistent bool { if (*0 == 'on') { ^on #-exit 2 "*" { @ historyctl(save $getset(history_save_file)); }; } else if (@) { ^on #exit 2 -"*"; }; }; set history_persistent off; addset history_save_file str; set history_save_file ~/.epic_history; addset history_remove_dupes bool; set history_remove_dupes off; addset history_save_position bool; set history_save_position on; addset history_timestamp bool; set history_timestamp off; if (getset(history_persistent) == 'on' && fexist("$getset(history_save_file)") == 1) { @ historyctl(read $getset(history_save_file)); }; # Copyright (c) 2007 BlackJac@EFNet # Version: 1.9.2007.09.28.2 alias bye (...) { //quit $*; }; alias date (...) { //time $*; }; alias exit (...) { //quit $*; }; alias host (...) { //userhost $*; }; alias irchost (...) { //hostname $*; }; alias ircname (...) { //^set realname $*; }; alias ircuser (...) { //^set default_username $*; }; alias leave (...) { //part $*; }; alias realname (...) { //set realname $*; }; alias signoff (...) { //quit $*; }; alias whowas (nick, args default "$getset(num_of_whowas)") { //whowas $nick $args; }; # FUNCTIONS # alias b64decode (...) { return $xform(-B64 $*); }; alias b64encode (...) { return $xform(+B64 $*); }; alias decode (...) { return $xform(-ENC $*); }; alias encode (...) { return $xform(+ENC $*); }; alias igmask (pattern, void) { return $ignorectl(pattern $pattern); }; alias igtype (pattern, void) { fe ($ignorectl(get $ignorectl(refnum $pattern) levels)) ii { push function_return ${ii =~ [+*] ? [$rest(1 $ii)] : sar(#/##$sar(#^#DONT-#$ii))}; }; }; alias lastserver (void) { return $serverctl(last_server); }; alias myservers (arg, void) { fe ($serverctl(omatch *)) mm { if (serverctl(get $mm connected)) { push :servers $mm; }; }; fe ($servers) nn { push function_return ${@arg ? nn : servername($nn)}; }; }; alias notifywindows (void) { fe ($windowctl(refnums)) nn { if (windowctl(get $nn notified)) { push function_return $nn; }; }; }; alias rigmask (pattern, void) { return $ignorectl(rpattern $pattern); }; alias rigtype (...) { return $ignorectl(with_type $*); }; alias sedcrypt (encode, who, ...) { if (!(:val = encryptparm(who))) { return; }; @ :key = word(1 $val); if (encode == 1) { return $xform(+SED $key $who $*); } else if (encode == 0) { return $xform(-SED $key $who $*); }; return; }; alias servergroup (refnum default "$serverctl(from_server)", void) { if (:group = serverctl(get $refnum group)) { return $group; }; return ; }; alias servername (refnum default "$serverctl(from_server)", void) { if (:name = serverctl(get $refnum itsname)) { return $name; }; return ; }; alias servernick (refnum default "$serverctl(from_server)", void) { return $serverctl(get $refnum nickname); }; alias servernum (refnum default "$serverctl(from_server)", void) { if ((:num = serverctl(refnum $refnum)) >= -1) { return $num; }; return -1; }; alias serverourname (refnum default "$serverctl(from_server)", void) { if (:ourname = serverctl(get $refnum name)) { return $ourname; }; return ; }; alias servertype (refnum default "$serverctl(from_server)", void) { return $serverctl(get $refnum protocol); }; alias servports (refnum default "$serverctl(from_server)", void) { return $serverctl(get $refnum port) $serverctl(get $refnum localport); }; alias sha256 (...) { return $xform(+SHA256 $*); }; alias urldecode (...) { return $xform(-URL $*); }; alias urlencode (...) { return $xform(+URL $*); }; alias winbound (winnum default 0, void) { return; }; alias wincursorline (winnum default 0, void) { if ((:cursorline = windowctl(get $windowctl(refnum $winnum) cursor)) >= -1) { return $cursorline; }; return -1; }; alias winlevel (winnum default 0, void) { return $windowctl(get $windowctl(refnum $winnum) window_level); }; alias winline (linenum, winnum default 0, void) { if ((:line = windowctl(get $windowctl(get refnum $winnum) line $linenum)) >= -1) { return $line; }; return -1; }; alias winnam (winnum default 0, void) { return $windowctl(get $windowctl(refnum $winnum) name); }; alias winnicklist (winnum default 0, void) { return $windowctl(get $windowctl(refnum $winnum) nicklist); }; alias winnum (winnum default 0, void) { if (:num = windowctl(get $windowctl(refnum $winnum) refnum)) { return $num; }; return -1; }; alias winquery (winnum default 0, void) { return $windowctl(get $windowctl(refnum $winnum) query); }; alias winrefs (void) { return $windowctl(refnums); }; alias winscreen (winnum default 0, void) { if ((:screen = windowctl(get $windowctl(refnum $winnum) screen)) >= -1) { return $screen; }; return -1; }; alias winscrollbacksize (winnum default 0, void) { if ((:scrollbacksize = windowctl(get $windowctl(refnum $winnum) display_buffer_size)) >= -1) { return $scrollbacksize; }; return -1; }; alias winserv (winnum default 0, void) { if ((:serv = windowctl(get $windowctl(refnum $winnum) server)) >= -2) { return $serv; }; return -1; }; alias winsize (winnum default 0, void) { return $windowctl(get $windowctl(refnum $winnum) display_size); }; alias winstatsize (winnum default 0, void) { if ((:statsize = windowctl(get $windowctl(refnum $winnum) double)) > -1) { return ${statsize + 1}; }; return -1; }; alias winvisible (winnum default 0, void) { if ((:visible = windowctl(get $windowctl(refnum $winnum) visible)) >= -1) { return $visible; }; return -1; }; # HOOKS # ^on ^send_public "*" { echo ${!iscurchan($0) ? (*) : ''}> $1-; }; # SETS # # AUTO_NEW_NICK # Copyright (c) 2005 David B. Kratter (BlackJac@EFNet) # Version: 1.0.2005.05.16.1 alias newnick.mangle (nick, void) { @ :length = getset(auto_new_nick_length); return ${@nick < length ? nick ## getset(auto_new_nick_char) : right(1 $nick) ## mid(0 ${length - 1} $nick)}; }; ^on ^new_nickname "*" { if (getset(auto_new_nick) == [on]) { if (:nicklist = getset(auto_new_nick_list)) { if (!(:nick = word(${findw($2 $nicklist) + 1} $nicklist))) { @ :nick = newnick.mangle($2); }; } else { @ :nick = newnick.mangle($2); }; xeval -s $0 nick $nick; } else { input "Nickname: " { nick $0; }; }; }; addset auto_new_nick bool; set auto_new_nick on; addset auto_new_nick_char char; set auto_new_nick_char _; addset auto_new_nick_length int; set auto_new_nick_length 9; addset auto_new_nick_list str; # AUTO_REJOIN, AUTO_REJOIN_DELAY addset auto_rejoin bool; set auto_rejoin off; addset auto_rejoin_delay int; set auto_rejoin_delay 0; ^on #-kick 1 '$$servernick() *' { if (getset(auto_rejoin) == 'on') { if (:delay = getset(auto_rejoin_delay)) { timer -w $winnum() $delay join $2; } else { defer join $2; }; }; }; # AUTO_UNMARK_AWAY addset auto_unmark_away bool; set auto_unmark_away off; ^on #-input 1 "*" { if (getset(auto_unmark_away) == 'on' && serverctl(get $servernum() away) && ([$0])) { away; }; }; ^on #-input 1 "/*" { if (getset(auto_unmark_away) == 'on' && serverctl(get $servernum() away) && findw($0 /m /n /me /msg /notice /say) > -1) { away; }; }; # AUTO_WHOWAS addset auto_whowas bool; set auto_whowas on; ^on #-401 1 "*" { if (getset(auto_whowas) == 'on' && !ischannel($1)) { whowas $1; }; }; # BEEP_ON_MSG addset beep_on_msg str; set beep_on_msg none; ^on #-action 1 "*" { if (getset(beep_on_msg) == 'all' || findw(action $getset(beep_on_msg)) > -1) { beep; }; }; ^on #-channel_sync 1 "*" { if (getset(beep_on_msg) == 'all' || findw(crap $getset(beep_on_msg)) > -1) { beep; }; }; ^on #-ctcp 1 "*" { if (getset(beep_on_msg) == 'all' || findw(ctcp $getset(beep_on_msg)) > -1) { beep; }; }; ^on #-dcc_activity 1 "*" { if (getset(beep_on_msg) == 'all' || findw(dcc $getset(beep_on_msg)) > -1) { beep; }; }; ^on #-dcc_connect 1 "*" { if (getset(beep_on_msg) == 'all' || findw(dcc $getset(beep_on_msg)) > -1) { beep; }; }; ^on #-dcc_list 1 "*" { if (getset(beep_on_msg) == 'all' || findw(dcc $getset(beep_on_msg)) > -1) { beep; }; }; ^on #-dcc_lost 1 "*" { if (getset(beep_on_msg) == 'all' || findw(dcc $getset(beep_on_msg)) > -1) { beep; }; }; ^on #-dcc_offer 1 "*" { if (getset(beep_on_msg) == 'all' || findw(dcc $getset(beep_on_msg)) > -1) { beep; }; }; ^on #-dcc_request 1 "*" { if (getset(beep_on_msg) == 'all' || findw(dcc $getset(beep_on_msg)) > -1) { beep; }; }; ^on #-join 1 "*" { if (getset(beep_on_msg) == 'all' || findw(crap $getset(beep_on_msg)) > -1) { beep; }; }; ^on #-mail 1 "*" { if (getset(beep_on_msg) == 'all' || findw(crap $getset(beep_on_msg)) > -1) { beep; }; }; ^on #-mode 1 "*" { if (getset(beep_on_msg) == 'all' || findw(crap $getset(beep_on_msg)) > -1) { beep; }; }; ^on #-msg 1 "*" { if (getset(beep_on_msg) == 'all' || findw(msgs $getset(beep_on_msg)) > -1) { beep; }; }; ^on #-notice 1 "*" { if (getset(beep_on_msg) == 'all' || findw(notices $getset(beep_on_msg)) > -1) { beep; }; }; ^on #-numeric 1 "*" { if (getset(beep_on_msg) == 'all' || findw(crap $getset(beep_on_msg)) > -1) { beep; }; }; ^on #-oper_notice 1 "*" { if (getset(beep_on_msg) == 'all' || findw(opnotes $getset(beep_on_msg)) > -1) { beep; }; }; ^on #-pong 1 "*" { if (getset(beep_on_msg) == 'all' || findw(crap $getset(beep_on_msg)) > -1) { beep; }; }; ^on #-public 1 "*" { if (getset(beep_on_msg) == 'all' || findw(public $getset(beep_on_msg)) > -1) { beep; }; }; ^on #-server_notice 1 "*" { if (getset(beep_on_msg) == 'all' || findw(snotes $getset(beep_on_msg)) > -1) { beep; }; }; ^on #-wallop 1 "*" { if (getset(beep_on_msg) == 'all' || findw(wallops $getset(beep_on_msg)) > -1) { beep; }; }; ^on #-who 1 "*" { if (getset(beep_on_msg) == 'all' || findw(crap $getset(beep_on_msg)) > -1) { beep; }; }; set beep_on_msg none; # COMMAND_MODE addset command_mode bool; set command_mode off; ^on ^input "*" { //sendline ${getset(command_mode) == 'on' ? '/' : ''}$*; }; ^on ^input "'*" { //send ${getset(command_mode) == 'on' ? rest(1 $*) : (*)}; }; ^on ^input "/*" { //sendline $*; }; # DCC_TIMEOUT addset dcc_timeout int; set dcc_timeout 3600; ^on #-timer 1 "*" { if (:timeout = getset(dcc_timeout)) { fe ($dccctl(refnums)) dd { if (time() - word(0 $dccctl(get $dd lasttime)) >= timeout) { @ :nick = dccctl(get $dd user); @ :type = dccctl(get $dd type); shook dcc_lost $nick $type $urlencode($dccctl(get $dd description)) IDLE TIME EXCEEDED; dcc close $type $nick; }; }; }; }; # FULL_STATUS_LINE addset full_status_line bool { if (*0 == 'on') { ^set status_format $before(-1  $status_format); ^set status_format1 $before(-1  $status_format1); ^set status_format2 $before(-1  $status_format2); } else { ^set status_format $status_format; ^set status_format1 $status_format1; ^set status_format2 $status_format2; }; }; set full_status_line on; # NUM_OF_WHOWAS addset num_of_whowas int; set num_of_whowas 1; # REALNAME ^on %set "REALNAME *" { ^set default_realname $1-; }; # SHOW_END_OF_MSGS addset show_end_of_msgs bool; set show_end_of_msgs on; fe (219 232 262 315 318 347 349 365 366 368 369 374 394) ss { ^on ?$ss "*" { return ${getset(show_end_of_msgs) == 'on' ? 0 : 1}; }; }; # SHOW_WHO_HOPCOUNT addset show_who_hopcount bool; set show_who_hopcount on; ^on ?who "*" { if (getset(show_who_hopcount) == 'on') { echo $[15]0 $[9]1 $[3]2 $3@$4 \($7-\); return 1; }; return 0; }; # VERBOSE_CTCP addset verbose_ctcp bool; set verbose_ctcp on; ^on ?ctcp "*" { return ${getset(verbose_ctcp) == 'on' ? 0 : 1}; }; # hop's script to return the old epic4 way of shortened commands... on ?unknown_command "*" (cmd, args) { @ :bonly = 0; if (left(2 $cmd) == [//]) { @ :bonly = 1; @ :cmd = rest(2 $cmd); }; @ :matches = symbolctl(pmatch builtin_command $cmd*); if (!bonly) { push matches $symbolctl(pmatch alias $cmd*); }; @ :matches = uniq($matches); @ :num = #matches; if (num > 1) { xecho -b Ambiguous ${bonly ? [builtin ] : []}command $cmd. Matches \($num\): $unsplit(", " $leftw(5 $matches))${num > 5 ? [, ...] : []}; return 1; }; if (num == 1) { $matches $args; return 1; }; return 0; }; # Inform about SAVE's removal ALIAS SAVE {XECHO -B Save isn't needed in LiCe 5.2+ anymore! Please read /help changelog}; # AUTO_RECONNECT addset auto_reconnect bool; addset auto_reconnect_retries int; addset auto_reconnect_delay int; # whether reconnect is enabled at all set auto_reconnect on; # how many failed reconnect attempts in a row before giving up, # 0 means infinite set auto_reconnect_retries 0; # delay in seconds between reconnect attempts set auto_reconnect_delay 60; alias _reconn.svkey (ref, void) { ^local gr; @ gr = servergroup($ref); if (gr == [] || gr == []) { return sv $ref; }; return gr $gr; }; alias _reconn.hook.disconn { if ([$1] != [CLOSING] && getset(auto_reconnect) == [ON]) { if (serverctl(GET $0 ADDRSLEFT)) { return; }; @ :egr = encode($_reconn.svkey($0)); if (reconn[$egr][lastserver] == []) { xeval -s $0 { fe ($tolower($mychannels($0))) i { if ((:win = winchan($i)) != -1) { push arr[$win] $i $key($i); }; }; }; foreach arr i { @ windowctl(SET $i TOPLINE 9 $arr[$i]); ^assign -arr[$i]; }; @ reconn[$egr][retries] = getset(auto_reconnect_retries) - 1; } else { if (reconn[$egr][retries] > -1) { @ reconn[$egr][retries]--; if (reconn[$egr][retries] <= 0) { _reconn.purge $0; xecho -b Number of retries for server $servername($0) exceeded; return; }; }; }; @ reconn[$egr][lastserver] = [$0]; xecho -b Reconnecting to $servername($0) in $getset(auto_reconnect_delay) seconds. Type /rmreconnect to cancel.${ reconn[$egr][retries] != -1 ? [ \($reconn[$egr][retries] retries left\).] : [] }; ^timer -ref _reconn$egr $getset(auto_reconnect_delay) _reconn.server $egr; }; }; fe (ERROR EOF) i { on #-SERVER_STATUS 27 "% % $i" { _reconn.hook.disconn $*; }; }; on #-SERVER_STATUS 27 "% % CLOSING" { if ([$1] != [EOF] && [$1] != [ERROR]) { _reconn.purge $0; }; }; on #-SERVER_STATUS 27 "% % ACTIVE" { fe ($winrefs()) i { if (winserv($i) == [$0]) { fe ($windowctl(GET $i TOPLINE 9)) ch k { window $i channel "$ch $k"; }; }; }; _reconn.purge $0; }; on #-SERVER_STATUS 27 "% % DELETE" { _reconn.sweep $0; }; #_reconn.purge #ref: server reference #Remove all references to the server and the server group it is in alias _reconn.clearentry (name, void) { ^assign -reconn[$name][timeout]; ^assign -reconn[$name][retries]; ^assign -reconn[$name][lastserver]; ^timer -delete _reconn$name; }; alias _reconn.purge (ref, void) { @ :gr = _reconn.svkey($ref); @ :egr = encode($gr); _reconn.clearentry $egr; if (word(0 $gr) == [gr]) { # it is a server, but it suddenly gained a group @ :str = encode(sv $ref); _reconn.clearentry $str; }; _reconn.clrtoplines $ref; }; alias _reconn.clrtoplines (ref, void) { fe ($winrefs()) i { if (ref == -1 || winserv($i) == ref) { @ windowctl(SET $i TOPLINE 9 ); }; }; }; alias _reconn.sweep (ref, void) { ^local str,type,item,gr,svs; _reconn.clrtoplines $ref; @ str = encode(sv $ref); _reconn.clearentry $str; foreach reconn i { @ str = decode($i); @ type = word(0 $str); @ item = word(1 $str); if (type == [sv]) { @ gr = servergroup($item); # it is a server, but it suddenly gained a group if (gr != [] && gr != []) { _reconn.clearentry $i; }; } elif (type == [gr]) { @ svs = serverctl(GMATCH $item); # there are no servers || the only server is the one that's being deleted if (svs == [] || svs == ref) { _reconn.clearentry $i; }; }; }; }; alias _reconn.server (sg,void) { ^local win,found,str,type,item,lastsv,next,svs,i; @ str = decode($sg); @ type = word(0 $str); @ item = word(1 $str); @ lastsv = reconn[$sg][lastserver]; @ svs = serverctl(GMATCH $item); if (lastsv == []) { _reconn.clearentry $sg; return; }; if (type == [gr] && item != [] && item != []) { fe ($svs) i { if (isconnected($i)) { _reconn.clearentry $sg; return -1; }; }; }; fe ($winrefs()) win { if (winserv($win) == lastsv) { PUSH found $win; }; }; if (found != []) { if (type == [gr]) { @ next = _reconn.nextserv($lastsv $item); } else { @ next = lastsv; }; if (next != -1 && !isconnected($next)) { fe ($found) j { window $j SERVER $next; }; } else { _reconn.clearentry $sg; }; } else { _reconn.clearentry $sg; }; }; alias rmreconnect { ^local i,st; foreach reconn i { @ :ref = reconn[$i][lastserver]; xecho -b Cancelling reconnect to $servername($ref) \(refnum $ref\); _reconn.clearentry $i; ^timer -delete _reconn$i; }; fe ($serverctl(OMATCH *)) i { @ st = serverctl(GET $i STATUS); switch ($st) { (dns) (connecting) (registering) (syncing) (ssl_connecting) { xecho -b Disconnecting from $servername($i) \(refnum $i); //^disconnect $i; }; }; }; }; alias _reconn.nextserv (ref, group, void) { if (group == []) { return -1; }; @ :servers = serverctl(GMATCH $group); @ :num = numwords($servers); if (num == 0) { # shouldn't happen return -1; }; @ :found = findw($ref $servers); if (found == -1) { return $word(0 $servers); }; @ num--; if (num == found) { return $word(0 $servers); } else { return $word(${found+1} $servers); }; }; _reconn.clrtoplines -1; #weirdo & kreca'2k6 lice5/lice/lice.defaults0000644000175000017500000001165112715251177013620 0ustar timtim# Client settings needed for correct script/client usage. # Updated for EPIC5 by tjh IF (word(2 $loadinfo()) != [pf]) { LOAD -pf $word(1 $loadinfo()); RETURN; }; PACKAGE LiCe; SET ALWAYS_SPLIT_BIGGEST OFF; SET AUTO_NEWNICK ON; SET AUTO_RECONNECT ON; SET AUTO_RECONNECT_DELAY 3; SET AUTO_REJOIN ON; SET AUTO_REJOIN_DELAY 10; SET AUTO_UNMARK_AWAY OFF; SET AUTO_WHOWAS OFF; SET BANNER ##; SET BANNER_EXPAND OFF; SET BEEP ON; SET BEEP_MAX 1; SET BEEP_ON_MSG NONE; SET BLINK_VIDEO OFF; SET BOLD_VIDEO ON; SET CHANNEL_NAME_WIDTH 13; SET CLOCK ON; SET CLOCK_24HOUR OFF; SET -CLOCK_FORMAT; SET COLOR ON; SET COMMAND_MODE OFF; SET COMMENT_HACK ON; SET CONNECT_TIMEOUT 60; SET CONTINUED_LINE ; SET CPU_SAVER_AFTER 10; SET CPU_SAVER_EVERY 5; SET CURRENT_WINDOW_LEVEL ALL; SET DCC_LONG_PATHNAMES OFF; SET DCC_SLIDING_WINDOW 4; SET DCC_STORE_PATH ~; SET DCC_TIMEOUT 300; SET DISPATCH_UNKNOWN_COMMANDS OFF; SET DISPLAY ON; SET DISPLAY_ANSI ON; SET DISPLAY_PC_CHARACTERS 4; SET DO_NOTIFY_IMMEDIATELY ON; SET EIGHT_BIT_CHARACTERS ON; SET FLOATING_POINT_MATH OFF; SET OLD_MATH_PARSER OFF; SET FLOOD_AFTER 8; SET FLOOD_RATE 3; SET FLOOD_USERS 10; SET FLOOD_WARNING OFF; SET FULL_STATUS_LINE ON; SET HIDE_PRIVATE_CHANNELS OFF; SET HIGHLIGHT_CHAR BOLD; SET HIGH_BIT_ESCAPE 2; SET HISTORY 25; SET HOLD_MODE OFF; SET INDENT ON; SET -INPUT_PROMPT; SET INSERT_MODE ON; SET INVERSE_VIDEO ON; SET LASTLOG 512; SET LASTLOG_LEVEL DCC,ALL; SET LOAD_PATH /usr/local/share/epic/script:~/lice5:.; SET LOG OFF; SET LOGFILE IRCLOG; SET MAIL 2; SET MANGLE_INBOUND; SET MANGLE_LOGFILES; SET MANGLE_OUTBOUND; SET MAX_RECONNECTs 0; SET MAX_RECURSIONS 50; SET MIRC_BROKEN_RESUME ON; SET MODE_STRIPPER ON; SET ND_SPACE_MAX 80; SET NOTIFY_HANDLER NOISY; SET NOTIFY_INTERVAL 90; SET NOTIFY_ON_TERMINATION OFF; SET NOTIFY_USERHOST_AUTOMATIC ON; SET NO_CONTROL_LOG OFF; SET NO_CTCP_FLOOD ON; SET NO_FAIL_DISCONNECT OFF; SET NUM_OF_WHOWAS 1; SET QUIT_MESSAGE https://lice.muppetz.com; DO { @ :realname = getenv(IRCNAME); SET REALNAME ${strlen($realname)?realname:[https\://lice.muppetz.com]}; }; SET -SCREEN_OPTIONS; SET SCROLLBACK 256; SET SCROLLBACK_RATIO 50; SET SCROLL_LINES 1; SET SECURITY 0; SET SHELL /bin/sh; SET SHELL_flags -c; SET SHELL_LIMIT 0; SET SHOW_CHANNEL_NAMES ON; SET SHOW_END_OF_MSGS ON; SET SHOW_NUMERICS OFF; SET SHOW_STATUS_ALL OFF; SET SHOW_WHO_HOPCOUNT OFF; # most SET STATUS_* moved to themes/default SET -STATUS_USER; SET STATUS_USER1 0; SET STATUS_USER2 ??; SET STATUS_USER3 Idle: ?; SET -STATUS_USER4; SET SUPPRESS_FROM_REMOTE_SERVER ON; SET SUPPRESS_SERVER_MOTD ON; SET TAB ON; SET TAB_MAX 8; SET UNDERLINE_VIDEO ON; SET USER_INFORMATION LiCe - https://lice.muppetz.com; SET VERBOSE_CTCP OFF; SET -XTERM; SET -XTERM_OPTIONS; # Global variables and default settings. UNLESS (lice.get(lice.database)) { @lice.add(lice.database 1); @lice.add(main.op 10); @lice.add(main.cch 15); @lice.add(main.agn 5); @lice.add(main.isolate 15); @lice.add(main.mrm 100); @lice.add(main.mnm 3); @lice.add(main.mns 5); @lice.add(main.nst 5); @lice.add(main.cset BCFOP); @lice.add(main.dset GSR); @lice.add(main.mset 1AMNOPQUV); @lice.add(main.wset DT); @lice.add(main.qbuff 200); IF (dlu == 1) { @lice.add(main.set ABFPRT); }{ @lice.add(main.set ABFPRTU); }; @lice.add(main.theme default); @lice.add(main.tsfmt %I:%M); @lice.add(main.auto_unban 0); # preferred nickname DO { @ :tmp = getenv(IRCUMODE); @lice.set(main.umode ${strlen($tmp) ? tmp : [-s]}); @ :tmp = getenv(IRCNICK); IF (strlen($tmp)) { @lice.set(main.auto_nick $tmp); @lice.set(main.buf $tmp); }{ @lice.del(main.auto_nick); @lice.del(main.buf); }; }; }; # set autonick IF (strlen($lice.get(main.auto_nick))) { ^SET auto_new_nick_list $lice.get(main.auto_nick) $getenv(USER) LiCeUser$rand(9); }{ ^SET auto_new_nick_list $getenv(USER) LiCeUser$rand(9); }; # reason files @ main.reason_quit = (fexist($(lice.save_path)/quit.reasons) == 1) ? which($lice.save_path/quit.reasons) : which($LiCePath/quit.reasons); @ main.reason_kick = (fexist($(lice.save_path)/kick.reasons) == 1) ? which($lice.save_path/kick.reasons) : which($LiCePath/kick.reasons); @ main.reason_back = (fexist($(lice.save_path)/back.reasons) == 1) ? which($lice.save_path/back.reasons) : which($LiCePath/back.reasons); @ main.reason_gone = (fexist($(lice.save_path)/gone.reasons) == 1) ? which($lice.save_path/gone.reasons) : which($LiCePath/gone.reasons); @ main.reason_oops = (fexist($(lice.save_path)/oops.reasons) == 1) ? which($lice.save_path/oops.reasons) : which($LiCePath/oops.reasons); @ main.reason_error = (fexist($(lice.save_path)/error.reasons) == 1) ? which($lice.save_path/error.reasons) : which($LiCePath/error.reasons); @ main.reason_revenge = (fexist($(lice.save_path)/revenge.reasons) == 1) ? which($lice.save_path/revenge.reasons) : which($LiCePath/revenge.reasons); # some DCC stuff ^ASSIGN main.dcc_active_limit 10; ^ASSIGN main.dcc_send_queue 50; ^ASSIGN main.dcc_get_queue 50; #tjh/12 lice5/lice/lice.boot0000644000175000017500000000165712715251177012761 0ustar timtim# # IRC Script Program. For use with ircii-EPIC5 clients. # Copyright (C) 2000 SrfRoG (cag@codehack.com) # # --------------------------------------------------------------------------- # All code by SrfRoG, unless specified. Visit https://lice.muppetz.com # --------------------------------------------------------------------------- # Updated for EPIC5 by tjh IF (word(2 $loadinfo()) != [pf]) { LOAD -pf $word(1 $loadinfo()); RETURN; }; PACKAGE LiCe; # BOOT - Multiple channel kickban ALIAS boot { UNLESS (@) { uecho Usage: /BOOT ; RETURN; }; @ :nick = [$0]; @ :kmsg = strlen($1) ? [$1-] : randread($main.reason_kick); @ :serv = winserv(); @ :patt = mask(0 $get_uh($nick)); FE ($mychannels()) chan { UNLESS (ischanop($N $chan) && onchannel($nick $chan)) {CONTINUE}; _proc.ban $chan $serv $patt $nick; _proc.quote_add $serv KICK $chan $nick :$kmsg; }; _proc.quote_flush $serv; }; #tjh/15 lice5/lice/lice.tab_comp0000644000175000017500000000647712715251177013607 0ustar timtim# # IRC Script Program. For use with ircii-EPIC5 clients. # Copyright (C) 2000 SrfRoG (cag@codehack.com) # # --------------------------------------------------------------------------- # All code by SrfRoG, unless specified. Visit https://lice.muppetz.com # --------------------------------------------------------------------------- # Updated for EPIC5 by tjh IF (word(2 $loadinfo()) != [pf]) { LOAD -pf $word(1 $loadinfo()); RETURN; }; PACKAGE LiCe; #XXX - TODO: sub-command layers. ie., /DCC SE -> /DCC SEND # Nick completion layer ALIAS nick_comp (word) { @ :list = pattern(${word}* $chanusers($C)); @FUNCTION_RETURN = strlen($list) ? list : file_comp($word); }; # Channel completion layer ALIAS chan_comp (word) { @ :list = pattern(${word}* $mychannels()); @FUNCTION_RETURN = strlen($list) ? list : file_comp($word); }; # File completion layer ALIAS file_comp (word) {@FUNCTION_RETURN = glob(\"${word}*\")}; # Operations for files ALIAS isfile (fn) {@FUNCTION_RETURN = !!pass(+=\$'\;%!@*~/,.:\"#&? $fn)}; ALIAS file_prefix (word) { @ :ret = prefix($word); @ :ret = (index(" " $word(0 $word)) == -1) ? ret : [\"] ## ret ## [\"]; @FUNCTION_RETURN = ret; }; ALIAS my_prefix (wn) {@FUNCTION_RETURN = isfile($wn) ? file_prefix($wn) : prefix($wn)}; # This splits our input line and inserts the completion ALIAS word_completion (pos) { ^LOCAL oline $L; @ :wpos = indextoword(${pos - 1} $oline); @ :word = word($wpos $^\oline); @ :s_bot = rest($pos $oline); @ :s_top = mid(0 $wordtoindex($wpos $oline) $oline); IF (ischannel($word)) { @ :comp = chan_comp($word); @ :num = numwords($comp); @ :word = (num > 1) ? my_prefix($comp) : comp; } ELSIF (isfile($word)) { @ :comp = file_comp($word); @ :num = numwords($comp); @ :word = (num > 1) ? file_prefix($comp) : comp; } ELSE { @ :comp = nick_comp($word); @ :num = numwords($comp); @ :word = num ? ((num > 1) ? my_prefix($comp) : (strlen($s_top) || isfile($comp)) ? comp : fmt.talk_reply($comp) # [ ]) : comp; }; UNLESS (num) {RETURN}; PARSEKEY ERASE_LINE; @ :nline = s_top ## word ## s_bot; XTYPE -L $nline; IF (num == 1) {RETURN}; XECHO -B Possible matches:; IF (maxlen($comp) > 10) { FE ($comp) x1 {ECHO $pad(4 " ") $x1}; }{ echo.recursive $comp; }; }; # msg completion module ALIAS msg_completion (cmd) { @ :serv = winserv(); IF (serv < 0) {RETURN}; @ :nick = shift(tabnick[$serv]); IF (strlen($nick)) { PUSH tabnick[$serv] $nick; PARSEKEY ERASE_LINE; @ :nick #= [ ]; XTYPE -L $cmd $nick; }; }; # tab completion routine # XXX - we can go more broad here by adding # command-specific options. ALIAS tab_completion { IF (!L || (word(0 $L) == [/MSG] && numwords($L) == 2)) { msg_completion /MSG; }{ word_completion $curpos(); }; }; # Alias to remove tab entries ALIAS rtab { IF ([$0]) { UNLESS (tabnick[$winserv()]) { uecho Tablist\: Currently Empty; RETURN; }; IF ([$0]==[*] || [$0]==[-a]) { uecho Tablist\: Removing \"$tabnick[$winserv()]\"; ^ASSIGN -tabnick[$winserv()]; }{ IF (match($0 $tabnick[$winserv()])) { @ tabnick[$winserv()] = remw($0 $tabnick[$winserv()]); uecho Tablist\: Removed \"$0\"; }; }; }; { uecho Usage\: /RTAB [esc+r to cycle current server tablist] }; }; #tjh/14 lice5/lice/lice.oops0000644000175000017500000000115612715251177012770 0ustar timtim# # IRC Script Program. For use with ircii-EPIC5 clients. # Copyright (C) 2000 SrfRoG (cag@codehack.com) # # --------------------------------------------------------------------------- # All code by SrfRoG, unless specified. Visit https://lice.muppetz.com # --------------------------------------------------------------------------- # Updated for EPIC5 by tjh IF (word(2 $loadinfo()) != [pf]) { LOAD -pf $word(1 $loadinfo()); RETURN; }; PACKAGE LiCe; ALIAS oops { UNLESS (@) { uecho Usage: /OOPS ; RETURN; }; @ :old_msg = B; //MSG $. $randread($main.reason_oops); //MSG $0 $old_msg; }; lice5/lice/lice.ulw_invite0000644000175000017500000000263712715251177014202 0ustar timtim# # IRC Script Program. For use with ircii-EPIC5 clients. # Copyright (C) 2000 SrfRoG (cag@codehack.com) # # --------------------------------------------------------------------------- # All code by SrfRoG, unless specified. Visit https://lice.muppetz.com # --------------------------------------------------------------------------- # Updated for EPIC5 by tjh IF (word(2 $loadinfo()) != [pf]) { LOAD -pf $word(1 $loadinfo()); RETURN; }; PACKAGE LiCe; # !INVITE command ALIAS _proc.ulw_invite (nick,uh,serv,pass,chan) { @ :myhand = find_in_list(User $nick!$uh); UNLESS (myhand) {RETURN}; FE ($myhand) hand { UNLESS (lice.get(main_PL$hand)) { XQUOTE -S $serv NOTICE $nick :You don't have a password set. Type: /MSG $servernick($serv) !HELP PASS; RETURN; }; IF (pass != lice.get(main_PL$hand)) { XQUOTE -S $serv NOTICE $nick :Invalid password. $randread($main.reason_error); RETURN; }; @ :chan_list = strlen($chan) ? chan : mychannels($serv); XEVAL -S $serv { FE ($chan_list) cn { IF (onchannel($nick $cn) || !ischanop($servernick() $cn) || !iscset(P $hash_32bit($cn))) {CONTINUE}; @ :test = (word(0 $getitem(ChanUser$hand 0)) == [#*]) ? 0 : matchitem(ChanUser$hand $cn *); IF (test < 0) {CONTINUE}; @ :mode = word(1 $getitem(ChanUser$hand $test)); IF (mode & 16) {_proc.quote_add $serv INVITE $nick $cn}; }; }; }; _proc.quote_flush $serv; }; #tjh/09 lice5/lice/lice.mk0000644000175000017500000000147612715251177012424 0ustar timtim# # IRC Script Program. For use with ircii-EPIC5 clients. # Copyright (C) 2000 SrfRoG (cag@codehack.com) # # --------------------------------------------------------------------------- # All code by SrfRoG, unless specified. Visit https://lice.muppetz.com # --------------------------------------------------------------------------- # Updated for EPIC5 by tjh IF (word(2 $loadinfo()) != [pf]) { LOAD -pf $word(1 $loadinfo()); RETURN; }; PACKAGE LiCe; ALIAS mk { UNLESS (ischanop($N $C)) { XECHO -B $ch($C)\: You're not channel operator.; RETURN; }; UNLESS (pass(: $*)) { ^ASSIGN kick_list $*; @ kick_msg = randread($main.reason_kick); }{ ^LOCAL mk.t $*; @ kick_list = before(: $mk.t); @ kick_msg = after(: $mk.t); }; _proc.loop_kick $winserv() $C kick_list kick_msg; }; #tjh/09 lice5/lice/lice.splitlist0000644000175000017500000000553112715251177014040 0ustar timtim# # IRC Script Program. For use with ircii-EPIC5 clients. # Copyright (C) 2000 SrfRoG (cag@codehack.com) # # --------------------------------------------------------------------------- # All code by SrfRoG, unless specified. Visit https://lice.muppetz.com # --------------------------------------------------------------------------- # Updated for EPIC5 by tjh IF (word(2 $loadinfo()) != [pf]) { LOAD -pf $word(1 $loadinfo()); RETURN; }; PACKAGE LiCe; ALIAS _proc.split_save (scurr,ssplit,chan,nick) { @ :split.test = matchitem(NSL $ssplit $chan *); IF (split.test >= 0) { @ :split.text = getitem(NSL $split.test); @ :split.time = word(2 $split.text); @ :split.nick = restw(3 $split.text); @ :split.find = findw($strip(@ $nick) $strip(@ $split.nick)); IF (split.find == -1) { @ :split.nick #= [ ] ## nick; }{ @ :split.nick = notw($split.find $split.nick) ## [ ] ## nick; }; }{ @ :split.nick = nick; @ :split.time = time(); @ :split.test = numitems(NSL); XECHO -W $chan $fmt.banner_alert() Possible netsplit: $scurr <- $ssplit \($chan\); IF (ismset(V)) {iecho Press "Esc-f", for split details.}; }; @ setitem(NSL $split.test $ssplit $chan $split.time $split.nick); }; ALIAS _proc.split_jump (number) { IF (numitems(NSL) == 0) { XECHO -B No netsplits recorded.; RETURN; }; @ :si.z = numitems(NSL) - 1; FE ($jot(0 $si.z)) si.c { @ si.t = getitem(NSL $si.c); IF (number == si.c + 1) { INPUT_CHAR "Do you want to connect using a new window ? (y/n) " { IF ([$0]==[Y]) { iecho Creating connection to $word(0 $si.t)...; win_new SERVER $word(0 $si.t):::$N$rand(99); }{ iecho Connecting to $word(0 $si.t)...; window SERVER $word(0 $si.t):::$N; };}; }; };}; ## detects netjoins + silences #channel JOINS/PARTS/CRAP temporarily ## blessing in *BIG* chans =) ON #-JOIN -81 * { UNLESS (numitems(NSL) == 0) { @ :chan = [$1]; @ :hash = hash_32bit($chan); @ :split = matchitem(NSL % $chan *$0*); IF (split > -1 && isset(Q) && !iscset(Q $hash)) {@dcnt[$hash]++}; IF (dcnt[$hash] == 5) { XECHO -W $chan $fmt.banner_alert() Possible Netjoin in progress... \($chan\); //^IGNORE $chan JOINS PARTS CRAP; ^TIMER $lice.get(main.isolate) //^IGNORE $chan -JOINS -PARTS -CRAP NONE; ^ASSIGN -dcnt[$hash]; }; }{purge dcnt}; }; ALIAS _proc.split_info { IF (numitems(NSL) == 0) { XECHO -B No netsplit details recorded.; RETURN; }; @ :si.z = numitems(NSL) - 1; iecho -------- Netsplit details --------; FE ($jot(0 $si.z)) si.c { @ :si.t = getitem(NSL $si.c); iecho [$[2]{si.c + 1}] $word(0 $si.t) detected on $ch($word(1 $si.t)) \($tdiff2(${time() - word(2 $si.t)}) ago\); echo.recursive $restw(3 $si.t); IF (ismset(V)) {iecho Press "Esc\-${si.c + 1}", to connect to $word(0 $si.t).}; }; }; #tjh/15 lice5/lice/lice.sensors0000644000175000017500000001237012715251177013504 0ustar timtim# # IRC Script Program. For use with ircii-EPIC5 clients. # Copyright (C) 2000 SrfRoG (cag@codehack.com) # # --------------------------------------------------------------------------- # All code by SrfRoG, unless specified. Visit https://lice.muppetz.com # --------------------------------------------------------------------------- # Updated for EPIC5 by tjh IF (word(2 $loadinfo()) != [pf]) { LOAD -pf $word(1 $loadinfo()); RETURN; }; PACKAGE LiCe; ALIAS _proc.set_sensors (list) { FEC ($list) opts { SWITCH ($opts) { (1) {INPUT "seconds to auto remove bans [0 to disable, using: $lice.get(main.auto_unban)]: " IF (isnumber($0)) {@lice.set(main.auto_unban $0)}}; (2) {INPUT "seconds to auto remove ignores [0 to disable, using: ${lice.get(main.auto_noig) ? lice.get(main.auto_noig) : [PERMANENT]}]: " IF (isnumber($0)) {@lice.set(main.auto_noig $0)}}; (A) {INPUT "minutes idle before AutoAWAY [0 to disable, using: $lice.get(main.agn)]: " IF (isnumber($0)) {@ lice.set(main.agn $0);^SET CPU_SAVER_AFTER ${lice.get(main.agn) * 2};^SET CPU_SAVER_EVERY $0}}; (C) {INPUT "seconds before creating channels [using: $tdiff2($lice.get(main.cch))]: " IF (isnumber($0)) {@lice.set(main.cch $0)}}; (D) {INPUT "maximum simultaneaous dcc processes [using: $lice.get(main.dcc_active_limit)]: " IF (isnumber($0) && [$0] > 0) {@lice.set(main.dcc_active_limit $0)}}; (E) {INPUT "minutes before netsplit data expires [using: $lice.set(main.nst)]: " IF (isnumber($0) && [$0] > 1) {@lice.set(main.nst $0)}}; (F) {INPUT "flood after [using: $FLOOD_AFTER]: " IF (isnumber($0) && [$0] > 0) {^SET FLOOD_AFTER $0;^SET FLOOD_RATE ${[$0] / 2}}}; (I) {INPUT "isolate client on floods [using: $tdiff2($lice.get(main.isolate))]: " IF (isnumber($0)) {@lice.set(main.isolate $0)}}; (J) {INPUT "seconds before joining channels on kicks [using: $tdiff2($AUTO_REJOIN_DELAY)]: " IF (isnumber($0)) {^SET AUTO_REJOIN_DELAY $0}}; (L) {INPUT "maximum message logging [using: $lice.get(main.mrm)]: " IF (isnumber($0) && [$0] > 0) {@lice.set(main.mrm $0)}}; (M) {UNLESS (ismset(L)) {INPUT "maximum number of stacked messages [using: $lice.get(main.mns)]: " IF (isnumber($0) && [$0] > 0) {@lice.set(main.mns $0)}}}; (N) {INPUT "preferred nickname (for AutoNick) [using: $lice.get(main.auto_nick)]: " IF (@) {^NOTIFY -$lice.get(main.auto_nick);@lice.set(main.auto_nick $0);^NOTIFY $lice.get(main.auto_nick)}}; (O) {INPUT "Auto OP delay in secs [using: $tdiff2($lice.get(main.op))]: " IF (isnumber($0)) {@lice.set(main.op $0)}}; (Q) {INPUT "server queue buffer size (max 500) [using: $lice.get(main.qbuff)]: " IF (isnumber($0) && [$0] > 0 && [$0] <= 500) {@lice.set(main.qbuff $0)}}; (R) {INPUT "maximum number of stacked modes [using: $lice.get(main.mnm)]: " IF (isnumber($0) && [$0] > 0) {@lice.set(main.mnm $0)}}; (S) {INPUT "timestamp (strftime) format [using: $lice.get(main.tsfmt)]: " IF (@) {@lice.set(main.tsfmt $*); IF (aliasctl(ALIAS EXISTS chanlog)) {_proc.uplogtsfmt}}}; (T) {INPUT "minutes before dccs timeout [using: $tdiff($DCC_TIMEOUT)]: " IF (isnumber($0) && [$0] > 1) {^SET DCC_TIMEOUT ${[$0] * 60}}}; (U) {INPUT "auto usermode [using: $lice.get(main.umode)]: " IF (@) {@lice.set(main.umode $0)}}; }; }; }; ALIAS sensors { IF (@) { _proc.set_sensors $toupper($0); RETURN; }; iecho +--------- Current LiCe Sensor Settings -----------------------+; iecho | Description | Ref | Def | Set |; iecho +------------------------------------------+-----+-----+-------+; iecho Auto ban removal time (in seconds) | 1 | 0 | $lice.get(main.auto_unban); iecho Auto ignore removal time (in seconds) | 2 | - | ${lice.get(main.auto_noig) > 0 ? lice.get(main.auto_noig) : [PERMANENT]}; iecho Minutes idle before AutoAWAY | A | 5 | $lice.get(main.agn); iecho Seconds before creating channels | C | 15 | $lice.get(main.cch); iecho Maximum simultaneaous dcc processes | D | 10 | $lice.get(main.dcc_active_limit); iecho Minutes before netsplit data expires | E | 5 | $lice.get(main.nst); iecho Flood after (how many lines?) | F | 8 | $FLOOD_AFTER; iecho Isolate client on floods (in seconds) | I | 15 | $lice.get(main.isolate); iecho Seconds before joining channels on kicks | J | 20 | $AUTO_REJOIN_DELAY; iecho Maximum message logging | L | 100 | $lice.get(main.mrm); UNLESS (ismset(L)) {iecho Maximum number of stacked messages | M | 5 | $lice.get(main.mns)}; iecho Preferred nickname (for AutoNick) | N |none | $lice.get(main.auto_nick); iecho Auto OP delay (in seconds) | O | 10 | $lice.get(main.op); iecho Server queue buffer size (max 500) | Q | 200 | $lice.get(main.qbuff); iecho Maximum number of stacked channel modes | R | 3 | $lice.get(main.mnm); iecho Timestamp (strftime) format | S | $lice.get(main.tsfmt); iecho Minutes before dccs timeout | T | 5 | ${DCC_TIMEOUT / 60}; iecho Default usermodes on connect | U | $lice.get(main.umode); INPUT "Letters to change sensors (ENTER to skip): " IF (@) {_proc.set_sensors $toupper($0)}; }; #tjh/15 lice5/lice/lice.dom0000644000175000017500000002104012715251177012561 0ustar timtim# ---------------------------------------------------------------------- # Filename : LICE.DOM # Description: A complete array describing top-level domains. # Author : SrfRoG (cag@codehack.com) # ---------------------------------------------------------------------- # Updated for EPIC5 by tjh IF (word(2 $loadinfo()) != [pf]) { LOAD -pf $word(1 $loadinfo()); RETURN; }; PACKAGE DOM; ^ASSIGN domain.AD Andorra; ^ASSIGN domain.AE United Arab Emirates; ^ASSIGN domain.AF Afghanistan; ^ASSIGN domain.AG Antigua and Barbuda; ^ASSIGN domain.AI Anguilla; ^ASSIGN domain.AL Albania; ^ASSIGN domain.AM Armenia; ^ASSIGN domain.AN Netherlands Antilles; ^ASSIGN domain.AO Angola; ^ASSIGN domain.AQ Antarctica; ^ASSIGN domain.AR Argentina; ^ASSIGN domain.AS American Samoa; ^ASSIGN domain.AT Austria; ^ASSIGN domain.AU Australia; ^ASSIGN domain.AW Aruba; ^ASSIGN domain.AZ Azerbaijan; ^ASSIGN domain.BA Bosnia and Herzegovina; ^ASSIGN domain.BB Barbados; ^ASSIGN domain.BD Bangladesh; ^ASSIGN domain.BE Belgium; ^ASSIGN domain.BF Burkina Faso; ^ASSIGN domain.BG Bulgaria; ^ASSIGN domain.BH Bahrain; ^ASSIGN domain.BI Burundi; ^ASSIGN domain.BJ Benin; ^ASSIGN domain.BM Bermuda; ^ASSIGN domain.BN Brunei Darussalam; ^ASSIGN domain.BO Bolivia; ^ASSIGN domain.BR Brazil; ^ASSIGN domain.BS Bahamas; ^ASSIGN domain.BT Bhutan; ^ASSIGN domain.BV Bouvet Island; ^ASSIGN domain.BW Botswana; ^ASSIGN domain.BY Belarus; ^ASSIGN domain.BZ Belize; ^ASSIGN domain.CA Canada; ^ASSIGN domain.CC Cocos (Keeling) Islands; ^ASSIGN domain.CF Central African Republic; ^ASSIGN domain.CG Congo; ^ASSIGN domain.CH Switzerland; ^ASSIGN domain.CI Cote D'Ivoire (Ivory Coast); ^ASSIGN domain.CK Cook Islands; ^ASSIGN domain.CL Chile; ^ASSIGN domain.CM Cameroon; ^ASSIGN domain.CN China; ^ASSIGN domain.CO Colombia; ^ASSIGN domain.CR Costa Rica; ^ASSIGN domain.CS Czechoslovakia (former); ^ASSIGN domain.CU Cuba; ^ASSIGN domain.CV Cape Verde; ^ASSIGN domain.CX Christmas Island; ^ASSIGN domain.CY Cyprus; ^ASSIGN domain.CZ Czech Republic; ^ASSIGN domain.DE Germany; ^ASSIGN domain.DJ Djibouti; ^ASSIGN domain.DK Denmark; ^ASSIGN domain.DM Dominica; ^ASSIGN domain.DO Dominican Republic; ^ASSIGN domain.DZ Algeria; ^ASSIGN domain.EC Ecuador; ^ASSIGN domain.EE Estonia; ^ASSIGN domain.EG Egypt; ^ASSIGN domain.EH Western Sahara; ^ASSIGN domain.ER Eritrea; ^ASSIGN domain.ES Spain; ^ASSIGN domain.ET Ethiopia; ^ASSIGN domain.FI Finland; ^ASSIGN domain.FJ Fiji; ^ASSIGN domain.FK Falkland Islands (Malvinas); ^ASSIGN domain.FM Micronesia; ^ASSIGN domain.FO Faroe Islands; ^ASSIGN domain.FR France; ^ASSIGN domain.FX France, Metropolitan; ^ASSIGN domain.GA Gabon; ^ASSIGN domain.GB Great Britain (UK); ^ASSIGN domain.GD Grenada; ^ASSIGN domain.GE Georgia; ^ASSIGN domain.GF French Guiana; ^ASSIGN domain.GH Ghana; ^ASSIGN domain.GI Gibraltar; ^ASSIGN domain.GL Greenland; ^ASSIGN domain.GM Gambia; ^ASSIGN domain.GN Guinea; ^ASSIGN domain.GP Guadeloupe; ^ASSIGN domain.GQ Equatorial Guinea; ^ASSIGN domain.GR Greece (Hellas); ^ASSIGN domain.GS S. Georgia and S. Sandwich Isls.; ^ASSIGN domain.GT Guatemala; ^ASSIGN domain.GU Guam; ^ASSIGN domain.GW Guinea-Bissau; ^ASSIGN domain.GY Guyana; ^ASSIGN domain.HK Hong Kong; ^ASSIGN domain.HM Heard and McDonald Islands; ^ASSIGN domain.HN Honduras; ^ASSIGN domain.HR Croatia (Hrvatska); ^ASSIGN domain.HT Haiti; ^ASSIGN domain.HU Hungary; ^ASSIGN domain.ID Indonesia; ^ASSIGN domain.IE Ireland; ^ASSIGN domain.IL Israel; ^ASSIGN domain.IN India; ^ASSIGN domain.IO British Indian Ocean Territory; ^ASSIGN domain.IQ Iraq; ^ASSIGN domain.IR Iran; ^ASSIGN domain.IS Iceland; ^ASSIGN domain.IT Italy; ^ASSIGN domain.JM Jamaica; ^ASSIGN domain.JO Jordan; ^ASSIGN domain.JP Japan; ^ASSIGN domain.KE Kenya; ^ASSIGN domain.KG Kyrgyzstan; ^ASSIGN domain.KH Cambodia; ^ASSIGN domain.KI Kiribati; ^ASSIGN domain.KM Comoros; ^ASSIGN domain.KN Saint Kitts and Nevis; ^ASSIGN domain.KP Korea (North); ^ASSIGN domain.KR Korea (South); ^ASSIGN domain.KW Kuwait; ^ASSIGN domain.KY Cayman Islands; ^ASSIGN domain.KZ Kazakhstan; ^ASSIGN domain.LA Laos; ^ASSIGN domain.LB Lebanon; ^ASSIGN domain.LC Saint Lucia; ^ASSIGN domain.LI Liechtenstein; ^ASSIGN domain.LK Sri Lanka; ^ASSIGN domain.LR Liberia; ^ASSIGN domain.LS Lesotho; ^ASSIGN domain.LT Lithuania; ^ASSIGN domain.LU Luxembourg; ^ASSIGN domain.LV Latvia; ^ASSIGN domain.LY Libya; ^ASSIGN domain.MA Morocco; ^ASSIGN domain.MC Monaco; ^ASSIGN domain.MD Moldova; ^ASSIGN domain.MG Madagascar; ^ASSIGN domain.MH Marshall Islands; ^ASSIGN domain.MK F.Y.R.O.M; ^ASSIGN domain.ML Mali; ^ASSIGN domain.MM Myanmar; ^ASSIGN domain.MN Mongolia; ^ASSIGN domain.MO Macau; ^ASSIGN domain.MP Northern Mariana Islands; ^ASSIGN domain.MQ Martinique; ^ASSIGN domain.MR Mauritania; ^ASSIGN domain.MS Montserrat; ^ASSIGN domain.MT Malta; ^ASSIGN domain.MU Mauritius; ^ASSIGN domain.MV Maldives; ^ASSIGN domain.MW Malawi; ^ASSIGN domain.MX Mexico; ^ASSIGN domain.MY Malaysia; ^ASSIGN domain.MZ Mozambique; ^ASSIGN domain.NA Namibia; ^ASSIGN domain.NC New Caledonia; ^ASSIGN domain.NE Niger; ^ASSIGN domain.NF Norfolk Island; ^ASSIGN domain.NG Nigeria; ^ASSIGN domain.NI Nicaragua; ^ASSIGN domain.NL Netherlands; ^ASSIGN domain.NO Norway; ^ASSIGN domain.NP Nepal; ^ASSIGN domain.NR Nauru; ^ASSIGN domain.NT Neutral Zone; ^ASSIGN domain.NU Niue; ^ASSIGN domain.NZ New Zealand (Aotearoa); ^ASSIGN domain.OM Oman; ^ASSIGN domain.PA Panama; ^ASSIGN domain.PE Peru; ^ASSIGN domain.PF French Polynesia; ^ASSIGN domain.PG Papua New Guinea; ^ASSIGN domain.PH Philippines; ^ASSIGN domain.PK Pakistan; ^ASSIGN domain.PL Poland; ^ASSIGN domain.PM St. Pierre and Miquelon; ^ASSIGN domain.PN Pitcairn; ^ASSIGN domain.PR Puerto Rico; ^ASSIGN domain.PT Portugal; ^ASSIGN domain.PW Palau; ^ASSIGN domain.PY Paraguay; ^ASSIGN domain.QA Qatar; ^ASSIGN domain.RE Reunion; ^ASSIGN domain.RO Romania; ^ASSIGN domain.RU Russian Federation; ^ASSIGN domain.RW Rwanda; ^ASSIGN domain.SA Saudi Arabia; ^ASSIGN domain.SB Solomon Islands; ^ASSIGN domain.SC Seychelles; ^ASSIGN domain.SD Sudan; ^ASSIGN domain.SE Sweden; ^ASSIGN domain.SG Singapore; ^ASSIGN domain.SH St. Helena; ^ASSIGN domain.SI Slovenia; ^ASSIGN domain.SJ Svalbard and Jan Mayen Islands; ^ASSIGN domain.SK Slovak Republic; ^ASSIGN domain.SL Sierra Leone; ^ASSIGN domain.SM San Marino; ^ASSIGN domain.SN Senegal; ^ASSIGN domain.SO Somalia; ^ASSIGN domain.SR Suriname; ^ASSIGN domain.ST Sao Tome and Principe; ^ASSIGN domain.SU USSR (former); ^ASSIGN domain.SV El Salvador; ^ASSIGN domain.SY Syria; ^ASSIGN domain.SZ Swaziland; ^ASSIGN domain.TC Turks and Caicos Islands; ^ASSIGN domain.TD Chad; ^ASSIGN domain.TF French Southern Territories; ^ASSIGN domain.TG Togo; ^ASSIGN domain.TH Thailand; ^ASSIGN domain.TJ Tajikistan; ^ASSIGN domain.TK Tokelau; ^ASSIGN domain.TM Turkmenistan; ^ASSIGN domain.TN Tunisia; ^ASSIGN domain.TO Tonga; ^ASSIGN domain.TP East Timor; ^ASSIGN domain.TR Turkey; ^ASSIGN domain.TT Trinidad and Tobago; ^ASSIGN domain.TV Tuvalu; ^ASSIGN domain.TW Taiwan; ^ASSIGN domain.TZ Tanzania; ^ASSIGN domain.UA Ukraine; ^ASSIGN domain.UG Uganda; ^ASSIGN domain.UK United Kingdom; ^ASSIGN domain.UM US Minor Outlying Islands; ^ASSIGN domain.US United States; ^ASSIGN domain.UY Uruguay; ^ASSIGN domain.UZ Uzbekistan; ^ASSIGN domain.VA Vatican City State (Holy See); ^ASSIGN domain.VC Saint Vincent and the Grenadines; ^ASSIGN domain.VE Venezuela; ^ASSIGN domain.VG Virgin Islands (British); ^ASSIGN domain.VI Virgin Islands (U.S.); ^ASSIGN domain.VN Viet Nam; ^ASSIGN domain.VU Vanuatu; ^ASSIGN domain.WF Wallis and Futuna Islands; ^ASSIGN domain.WS Samoa; ^ASSIGN domain.YE Yemen; ^ASSIGN domain.YT Mayotte; ^ASSIGN domain.YU Yugoslavia; ^ASSIGN domain.ZA South Africa; ^ASSIGN domain.ZM Zambia; ^ASSIGN domain.ZR Zaire; ^ASSIGN domain.ZW Zimbabwe; ^ASSIGN domain.COM US Commercial; ^ASSIGN domain.EDU US Educational; ^ASSIGN domain.GOV US Government; ^ASSIGN domain.INT International Organization; ^ASSIGN domain.MIL US Military; ^ASSIGN domain.NET Network; ^ASSIGN domain.ORG Non-Profit Organization; ^ASSIGN domain.RPA Old style Arpanet; ^ASSIGN domain.NATO NATO field; ^ASSIGN domain.AERO Aviation; ^ASSIGN domain.BIZ Business Organization; ^ASSIGN domain.COOP Co-Operative Organization; ^ASSIGN domain.INFO Open TLD; ^ASSIGN domain.MUSEUM Museum; ^ASSIGN domain.NAME Personal; ^ASSIGN domain.PRO Professional; ^ASSIGN domain.ARPA Old Style ARPANET; ALIAS dom { UNLESS (@) { uecho Usage: /DOM ; RETURN; } @ :dot = pass(. $0) ? mid(${rindex(. $0)+1} 3 $0) : [$0]; @ :dot = toupper($dot); @ :dom = domain[$dot] ? domain[$dot] : [Unknown]; IF (temp.whois_away > 0) { ECHO $fmt.whois_mid(Domain ".$dot\" is $dom); }{ iecho Top-level domain '$dot' is $dom\.; }; }; ALIAS country {dom $*}; lice5/lice/lice.ignore0000644000175000017500000000410112715251177013264 0ustar timtim# # IRC Script Program. For use with ircii-EPIC5 clients. # Copyright (C) 2000 SrfRoG (cag@codehack.com) # # --------------------------------------------------------------------------- # All code by SrfRoG, unless specified. Visit https://lice.muppetz.com # --------------------------------------------------------------------------- # Updated for EPIC5 by tjh IF (word(2 $loadinfo()) != [pf]) { LOAD -pf $word(1 $loadinfo()); RETURN; }; PACKAGE LiCe; ALIAS ignore { @ :types = strlen($1) ? [$1-] : [MSGS WALLS WALLOPS INVITES NOTICES SNOTES CTCPS TOPICS NICKS JOINS PARTS CRAP]; IF (match(timeout $1-)) {@ :tempig = 1}; SWITCH ($0) { () { uecho Usage: IGNORE < nick | n!u@h pattern > [[-|+]Ignore types] [reason "your reason"] [timeout