Some improvements relating to the IRC module.

This commit is contained in:
dom96 2011-09-04 20:28:32 +01:00
commit 4896f63129
4 changed files with 25 additions and 20 deletions

View file

@ -177,7 +177,9 @@ Internet Protocols and Support
* `smtp <smtp.html>`_ * `smtp <smtp.html>`_
This module implement a simple SMTP client. This module implement a simple SMTP client.
* `irc <irc.html>`_
This module implements an asynchronous IRC client.
Parsers Parsers
------- -------

View file

@ -159,22 +159,6 @@ proc parseMessage(msg: string): TIRCEvent =
if msg[i] == ':': if msg[i] == ':':
inc(i) # Skip `:`. inc(i) # Skip `:`.
result.params.add(msg[i..msg.len-1]) result.params.add(msg[i..msg.len-1])
proc irc*(address: string, port: TPort = 6667.TPort,
nick = "NimrodBot",
user = "NimrodBot",
realname = "NimrodBot", serverPass = "",
joinChans: seq[string] = @[]): TIRC =
result.address = address
result.port = port
result.nick = nick
result.user = user
result.realname = realname
result.serverPass = serverPass
result.lastPing = epochTime()
result.lastPong = -1.0
result.lag = -1.0
result.channelsToJoin = joinChans
proc connect*(irc: var TIRC) = proc connect*(irc: var TIRC) =
## Connects to an IRC server as specified by ``irc``. ## Connects to an IRC server as specified by ``irc``.
@ -188,6 +172,25 @@ proc connect*(irc: var TIRC) =
if irc.serverPass != "": irc.send("PASS " & irc.serverPass) if irc.serverPass != "": irc.send("PASS " & irc.serverPass)
irc.send("NICK " & irc.nick) irc.send("NICK " & irc.nick)
irc.send("USER $1 * 0 :$2" % [irc.user, irc.realname]) irc.send("USER $1 * 0 :$2" % [irc.user, irc.realname])
proc irc*(address: string, port: TPort = 6667.TPort,
nick = "NimrodBot",
user = "NimrodBot",
realname = "NimrodBot", serverPass = "",
joinChans: seq[string] = @[]): TIRC =
## This function calls `connect`, so you don't need to.
result.address = address
result.port = port
result.nick = nick
result.user = user
result.realname = realname
result.serverPass = serverPass
result.lastPing = epochTime()
result.lastPong = -1.0
result.lag = -1.0
result.channelsToJoin = joinChans
result.connect()
proc poll*(irc: var TIRC, ev: var TIRCEvent, proc poll*(irc: var TIRC, ev: var TIRCEvent,
timeout: int = 500): bool = timeout: int = 500): bool =
@ -236,8 +239,7 @@ proc getLastPong*(irc: var TIRC): float =
return irc.lastPong return irc.lastPong
when isMainModule: when isMainModule:
var client = irc("irc.freenode.net",joinChans = @["#nimrod"]) var client = irc("irc.freenode.net", nick="TestBot", joinChans = @["#nimrod"])
client.connect()
while True: while True:
var event: TIRCEvent var event: TIRCEvent
if client.poll(event): if client.poll(event):

View file

@ -73,6 +73,7 @@ Library Additions
- Added ``xmltree.innerText``. - Added ``xmltree.innerText``.
- Added ``os.isAbsolute``. - Added ``os.isAbsolute``.
- Added ``locks`` core module for more flexible locking support. - Added ``locks`` core module for more flexible locking support.
- Added ``irc`` module.
2011-07-10 Version 0.8.12 released 2011-07-10 Version 0.8.12 released

View file

@ -41,7 +41,7 @@ srcdoc: "pure/json;pure/base64;pure/scgi;pure/redis;impure/graphics"
srcdoc: "impure/rdstdin;wrappers/zmq;wrappers/sphinx" srcdoc: "impure/rdstdin;wrappers/zmq;wrappers/sphinx"
srcdoc: "pure/collections/tables;pure/collections/sets;pure/collections/lists" srcdoc: "pure/collections/tables;pure/collections/sets;pure/collections/lists"
srcdoc: "pure/collections/intsets;pure/collections/queues;pure/encodings" srcdoc: "pure/collections/intsets;pure/collections/queues;pure/encodings"
srcdoc: "pure/events;pure/collections/sequtils" srcdoc: "pure/events;pure/collections/sequtils;pure/irc"
webdoc: "wrappers/libcurl;pure/md5;wrappers/mysql;wrappers/iup" webdoc: "wrappers/libcurl;pure/md5;wrappers/mysql;wrappers/iup"
webdoc: "wrappers/sqlite3;wrappers/postgres;wrappers/tinyc" webdoc: "wrappers/sqlite3;wrappers/postgres;wrappers/tinyc"