diff --git a/Glob2Chan/config.py b/Glob2Chan/config.py index 488614f..9ae6827 100644 --- a/Glob2Chan/config.py +++ b/Glob2Chan/config.py @@ -44,6 +44,13 @@ Glob2Chan = conf.registerPlugin('Glob2Chan') # This is where your configuration variables (if any) should go. For example: # conf.registerGlobalValue(Glob2Chan, 'someConfigVariableName', # registry.Boolean(False, """Help for someConfigVariableName.""")) +conf.registerGlobalValue(Glob2Chan, 'nowelcome', registry.String('', + '''List of nick that doesn't get the welcome message.''')) +conf.registerGlobalValue(Glob2Chan, 'gamers', registry.String('', + '''List of nick that are notified when someone calls @ask4game.''')) +conf.registerGlobalValue(Glob2Chan, 'helpers', registry.String('', + '''List of nick that are notified when someone calls @ask4help.''')) + # vim:set shiftwidth=4 tabstop=4 expandtab textwidth=79: diff --git a/Glob2Chan/plugin.py b/Glob2Chan/plugin.py index 0fdd05e..97ecfb3 100644 --- a/Glob2Chan/plugin.py +++ b/Glob2Chan/plugin.py @@ -31,15 +31,149 @@ import supybot.utils as utils from supybot.commands import * import supybot.plugins as plugins +import supybot.ircmsgs as ircmsgs import supybot.ircutils as ircutils import supybot.callbacks as callbacks class Glob2Chan(callbacks.Plugin): - """Add the help for "@plugin help Glob2Chan" here - This should describe *how* to use this plugin.""" - pass + def doJoin(self, irc, msg): + channel = msg.args[0] + if channel != '#glob2': + return + nick = msg.nick + if nick.startswith('[YOG]') and \ + nick not in self.registryValue('nowelcome').split(' '): + irc.queueMsg(ircmsgs.privmsg(nick, 'Hi %s, welcome to the ' + 'globulation online game. Some people are connected from ' + 'IRC if you say there name, they may answer you or start ' + 'playing. For more help, type "@g2help" (without the quotes).'% + nick)) + if nick.startswith('[YOG]'): + irc.queueMsg(ircmsgs.IrcMsg(s='WHOIS %s' % nick)) + def do311(self, irc, msg): + nick = msg.args[1] + realname = msg.args[5] + try: + version = 'Glob2 version %s' % realname.split('-')[1] + except: + version = 'unknown version' + irc.queueMsg(ircmsgs.privmsg('#glob2', 'Welcome to %s, running %s' % \ + (nick, version))) + + def g2help(self, irc, msg, args, mode): + channel = msg.args[0] + if channel != '#glob2': + return + nick = msg.nick + if mode is None and nick.startswith('[YOG]'): + mode = 'yog' + elif mode is None: + mode = 'irc' + if not mode in ('yog', 'irc'): + irc.error('Modes can are only "irc" and "yog"') + return + if mode == 'irc': + irc.reply('(help for YOG users:) If you are feed up with getting ' + 'a welcome message each time you log in, type "@nowelcome". ' + 'If you want to send an automatically alert to every people ' + 'who wants to play but who is not reading the chat, type ' + '"@ask4game". For more information, ask for help, with ' + 'typing `!ask4help`. You can find stats about this channel ' + 'at http://openihs.org:8081/global/glob2') + elif mode == 'yog': + irc.reply('(help for IRC users:) If you want to be notified each ' + 'time someone uses "@ask4game" (game query) or "@ask4help" ' + '(help query), type "@subscribe ask4game" or "@subscribe ' + 'ask4help" (depending on what you want). The opposite of ' + '"@subscribe" is "@unsubscribe".') + g2help = wrap(g2help, [optional('somethingWithoutSpaces')]) + + def nowelcome(self, irc, msg, args): + """takes no arguments + + Disable the welcome message""" + channel = msg.args[0] + if channel != '#glob2': + return + nick = msg.nick + if not nick.startswith('[YOG]'): + irc.error('You are not a YOG user, so, their is no reason I send ' + 'you a welcome message, but you ask me to stop sending them ' + 'to you. Are you crazy?') + return + self.registryValue('nowelcome', value='%s %s' % + (self.registryValue('nowelcome'), nick)) + irc.reply('I will not send you again the welcome message') + nowelcome = wrap(nowelcome, []) + + def ask4game(self, irc, msg, args): + """takes no arguments + + Notifies the gamers who subscribed to the alert list you want + to play.""" + channel = msg.args[0] + if channel != '#glob2': + return + online = irc.state.channels[channel].users + gamers = self.registryValue('gamers') + onlineGamers = [x for x in online if x in gamers] + if len(onlineGamers) == 0: + irc.reply('Sorry, no registered gamer is online') + return + irc.reply('%s: %s' % (' & '.join(onlineGamers), + 'Someone is asking for a game!'), + prefixNick=False) + ask4game = wrap(ask4game, []) + + def ask4help(self, irc, msg, args): + """takes no arguments + + Notifies the helers who subscribed to the alert list you want + to play.""" + channel = msg.args[0] + if channel != '#glob2': + return + online = irc.state.channels[channel].users + helpers = self.registryValue('helpers') + onlineHelpers = [x for x in online if x in helpers] + if len(onlineHelpers) == 0: + irc.reply('Sorry, no registered helper is online') + return + irc.reply('%s: %s' % (' & '.join(onlineHelpers), + 'Someone is asking for help!'), + prefixNick=False) + ask4help = wrap(ask4help, []) + + def subscribe(self, irc, msg, args, type_): + """{ask4game|ask4help} + + Subscribes you to the gamers/helpers alert list.""" + channel = msg.args[0] + if channel != '#glob2': + return + nick = msg.nick + print repr(type_) + if type_ == 'ask4game': + if nick in self.registryValue('gamers').split(' '): + irc.error('You already subscribed to this list') + return + print '%s %s' % \ + (self.registryValue('gamers'), nick) + self.setRegistryValue('gamers', value='%s %s' % + (self.registryValue('gamers'), nick)) + elif type_ == 'ask4help': + if nick in self.registryValue('helpers').split(' '): + irc.error('You already subscribed to this list') + return + self.setRegistryValue('helpers', value='%s %s' % + (self.registryValue('helpers'), nick)) + else: + irc.error('The only available subscriptions are ask4game and ' + 'ask4help.') + irc.reply('I will notify you each time someone uses %s.' % type_) + subscribe = wrap(subscribe, ['somethingWithoutSpaces']) Class = Glob2Chan diff --git a/Glob2Chan/test.py b/Glob2Chan/test.py index 7c63ccc..e86f6e7 100644 --- a/Glob2Chan/test.py +++ b/Glob2Chan/test.py @@ -29,9 +29,11 @@ ### from supybot.test import * +import supybot.ircmsgs as ircmsgs class Glob2ChanTestCase(PluginTestCase): plugins = ('Glob2Chan',) + # vim:set shiftwidth=4 tabstop=4 expandtab textwidth=79: