Add support for multiple server hostnames

This commit is contained in:
Dave Pedu 2015-11-29 22:42:45 -08:00
parent fdd504dae6
commit 67c1c2fab9
3 changed files with 19 additions and 7 deletions

View File

@ -6,7 +6,13 @@
"usermodules": [ "./data/modules/" ]
},
"connection":{
"server":"irc.freenode.net",
"servers": [
"weber.freenode.net",
"asimov.freenode.net",
"card.freenode.net",
"dickson.freenode.net",
"morgan.freenode.net"
],
"ipv6":"off",
"port":6667
},

View File

@ -40,8 +40,10 @@ class IRCCore(asynchat.async_chat):
self.alive = True
"""True if we should try to stay connected"""
self.server = None
"""Server address"""
self.server = 0
"""Current server index"""
self.servers = []
"""List of server address"""
self.port = 0
"""Server port"""
self.ipv6 = False
@ -143,12 +145,16 @@ class IRCCore(asynchat.async_chat):
def _connect(self):
"""Connect to IRC"""
self.log.debug("Connecting to %(server)s:%(port)i", {"server":self.server, "port":self.port})
self.server+=1
if self.server >= len(self.servers):
self.server=0
serverHostname = self.servers[self.server]
self.log.debug("Connecting to %(server)s:%(port)i", {"server":serverHostname, "port":self.port})
socket_type = socket.AF_INET
if self.ipv6:
self.log.info("IPv6 is enabled.")
socket_type = socket.AF_INET6
socketInfo = socket.getaddrinfo(self.server, self.port, socket_type)
socketInfo = socket.getaddrinfo(serverHostname, self.port, socket_type)
self.create_socket(socket_type, socket.SOCK_STREAM)
self.log.debug("Socket created: %s" % self.socket.fileno())
self.connect(socketInfo[0][4])
@ -383,7 +389,7 @@ class IRCCore(asynchat.async_chat):
:type hostname: str
:param realname: the bot's realname
:type realname: str"""
self.sendRaw("USER %s %s %s :%s" % (username, hostname, self.server, realname))
self.sendRaw("USER %s %s %s :%s" % (username, hostname, self.servers[self.server], realname))
def act_NICK(self, newNick):
"""Use the `/nick` command

View File

@ -37,7 +37,7 @@ class PyIRCBot:
self.irc = IRCCore()
"""IRC protocol class"""
self.irc.server = self.botconfig["connection"]["server"]
self.irc.servers = self.botconfig["connection"]["servers"]
self.irc.port = self.botconfig["connection"]["port"]
self.irc.ipv6 = True if self.botconfig["connection"]["ipv6"]=="on" else False