Skip to content

Commit

Permalink
Irc bot uses loadPluginConfig
Browse files Browse the repository at this point in the history
  • Loading branch information
greghaynes committed Mar 4, 2010
1 parent debb85a commit f61fe09
Showing 1 changed file with 44 additions and 26 deletions.
70 changes: 44 additions & 26 deletions src/pyscripts/plugins/ircbot.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
from twisted.internet import reactor, protocol

from xsbs.colors import colordict
from xsbs.settings import PluginConfig, NoOptionError
from xsbs.settings import loadPluginConfig, NoOptionError
from xsbs.events import registerServerEventHandler
from xsbs.timers import addTimer
from xsbs.server import message
Expand All @@ -11,22 +11,38 @@

import string

config = PluginConfig('ircbot')
enable = config.getOption('Config', 'enable', 'no') == 'yes'
channel = config.getOption('Config', 'channel', '#xsbs-newserver')
servername = config.getOption('Config', 'servername', 'irc.gamesurge.net')
nickname = config.getOption('Config', 'nickname', 'xsbs-newbot')
port = int(config.getOption('Config', 'port', '6667'))
part_message = config.getOption('Config', 'part_message', 'XSBS - eXtensible SauerBraten Server')
msg_gw = config.getOption('Abilities', 'message_gateway', 'yes') == 'yes'
irc_msg_temp = config.getOption('Templates', 'irc_message', '${grey}${channel} ${blue}${name}${white}: ${message}')
status_message = config.getOption('Templates', 'status_message', '${num_clients} clients on map ${map_name}')
try:
ipaddress = config.getOption('Config', 'ipaddress', None, False)
except NoOptionError:
ipaddress = None
irc_msg_temp = string.Template(irc_msg_temp)
ircchannel = channel
config = {
'Main': {
'enable': 'no',
'part_message': 'XSBS - eXtensible SauerBraten Server',
'ipaddress': '0',
},
'Connection': {
'server': 'irc.gamesurge.net',
'port': '6667',
'nickname': 'xsbs-newbot',
'channel': '#xsbs-newserver'
},
'Features': {
'message_gateway': 'yes'
},
'Alerts': {
'player_connect': 'yes',
'player_disconnect': 'yes',
'message': 'yes',
'team_message': 'no',
'map_change': 'yes',
'gain_admin': 'yes',
'gain_master': 'yes',
'auth': 'yes',
'relinquish_master': 'yes',
'relinquish_admin': 'yes'
},
'Templates': {
'irc_message': '${grey}${channel} ${blue}${name}${white}: ${message}',
'status_message': '${num_clients} clients on map ${map_name}',
}
}

class IrcBot(irc.IRCClient):
def connectionMade(self):
Expand All @@ -51,7 +67,7 @@ def broadcast(self, message):
def privmsg(self, user, channel, msg):
if channel == ircchannel:
user = user.split('!', 1)[0]
message(irc_msg_temp.substitute(colordict, channel=channel, name=user, message=msg))
message(config['Templates']['irc_message'].substitute(colordict, channel=channel, name=user, message=msg))

class IrcBotFactory(protocol.ClientFactory):
protocol = IrcBot
Expand All @@ -61,10 +77,10 @@ def __init__(self, nickname, channels):
self.bots = []
self.reconnect_count = 0
def doConnect(self):
if ipaddress == None:
reactor.connectTCP(servername, int(port), factory)
if ipaddress == '0':
reactor.connectTCP(config['Connection']['server'], int(config['Connection']['port']), factory)
else:
reactor.connectTCP(servername, int(port), factory, 30, (ipaddress, 0))
reactor.connectTCP(config['Connection']['server'], int(config['Connection']['port']), factory, 30, (config['Connection']['ipaddress'], 0))
def doReconnect(self):
if self.reconnect_count < 5:
self.reconnect_count += 1
Expand All @@ -81,7 +97,7 @@ def broadcast(self, message):
bot.broadcast(message)

event_abilities = {
'player_active': ('player_connect', lambda x: factory.broadcast('%s (\x037 %i \x03) \x032Connected\x03' % (sbserver.playerName(x), x))),
'player_connect': ('player_connect', lambda x: factory.broadcast('%s (\x037 %i \x03) \x032Connected\x03' % (sbserver.playerName(x), x))),
'player_disconnect': ('player_disconnect', lambda x: factory.broadcast('%s (\x037 %i \x03) \x032Disconnected\x03' % (sbserver.playerName(x), x))),
'message': ('player_message', lambda x, y: factory.broadcast('%s (\x037 %i \x03): %s' % (sbserver.playerName(x), x, y))),
'map_change': ('map_changed', lambda x, y: factory.broadcast('\x038Map changed to:\x03 %s (%s)' % (x, sbserver.modeName(y)))),
Expand All @@ -92,15 +108,17 @@ def broadcast(self, message):
'relinquish_master': ('player_released_master', lambda x: factory.broadcast('%s (\x037 %i \x03) \x036Has relinquished master\x03' % (sbserver.playerName(x), x))),
}

factory = IrcBotFactory(config['Connection']['nickname'], [config['Connection']['channel']])

def init():
if enable:
loadPluginConfig(config, 'IrcBot')
config['Templates']['irc_message'] = string.Template(config['Templates']['irc_message'])
if config['Main']['enable'] == 'yes':
factory.doConnect()
for key in event_abilities.keys():
if config.getOption('Abilities', key, 'no') == 'yes':
if config['Features'][key] == 'yes':
ev = event_abilities[key]
registerServerEventHandler(ev[0], ev[1])

factory = IrcBotFactory(nickname, [channel])

init()

0 comments on commit f61fe09

Please sign in to comment.