Changes in / [20:30]


Ignore:
Location:
/trunk
Files:
5 added
4 edited

Legend:

Unmodified
Added
Removed
  • /trunk/amazonbot/amazonbot.py

    r20 r28  
    33 
    44__version__ = '$Revision$' 
    5 __author__ = 'Atzm WATANABE <sitosito@p.chan.ne.jp>' 
     5__author__ = 'Atzm WATANABE <atzm@atzm.org>' 
    66__date__ = '$Date$' 
    7 __copyright__ = 'Copyright(C) 2006 Atzm WATANABE, all rights reserved.' 
     7__copyright__ = 'Copyright(C) 2006-2007 Atzm WATANABE, all rights reserved.' 
    88__license__ = 'Python' 
    99 
    1010import re 
     11import string 
    1112import sys 
    1213import time 
     
    147148            return method(c, e, to, words[1:]) # words[0] == command name 
    148149 
     150        self.message_action(msg, c, e, to) 
     151 
    149152        # silence 
    150153        self.silence(msg, c, e, to) 
     
    217220    def get_prev_time(self): 
    218221        return self._prev_time 
     222 
     223    def message_action(self, msg, c, e, to): 
     224        for i in xrange(100): 
     225            action = 'action%d' % i 
     226            if not config.has_section(action): 
     227                break 
     228 
     229            c_stime = config.get(action, 'start_time') 
     230            c_etime = config.get(action, 'end_time') 
     231 
     232            try: 
     233                if c_stime and c_etime: 
     234                    now = time.time() 
     235                    [now_y, now_m, now_d] = time.localtime(now)[:3] 
     236 
     237                    stime = '%04d/%02d/%02d %s' % (now_y, now_m, now_d, c_stime) 
     238                    etime = '%04d/%02d/%02d %s' % (now_y, now_m, now_d, c_etime) 
     239                    stime = time.mktime(time.strptime(stime, '%Y/%m/%d %H:%M')) 
     240                    etime = time.mktime(time.strptime(etime, '%Y/%m/%d %H:%M')) 
     241 
     242                    if not ((stime <= now) and (now <= etime)): 
     243                        _debug('Out of time: %s - %s' % (c_stime, c_etime)) 
     244                        continue 
     245            except: 
     246                _debug('Invalid time: %s - %s' % (str(c_stime), str(c_etime))) 
     247                continue 
     248 
     249            pattern = unicoding(config.get(action, 'input_pattern')) 
     250            match   = None 
     251            try: 
     252                match = re.search(pattern, msg) 
     253            except: 
     254                _debug('Invalid regexp: %s', pattern) 
     255                continue 
     256 
     257            if not match: 
     258                continue 
     259 
     260            act = config.get(action, 'action') 
     261            fmt = config.get(action, 'message') 
     262            try: 
     263                _from   = nm_to_n(e.source()) 
     264                message = ununicoding(fmt % _from) 
     265 
     266                if not message: 
     267                    _debug('No message specified') 
     268                    continue 
     269 
     270                if not act: 
     271                    c.notice(to, message) 
     272                    continue 
     273 
     274                method = getattr(self, 'onact_%s' % act, lambda *arg: False) 
     275                method(message, c, e, to) 
     276 
     277            except: 
     278                _debug('Action failed: %s (%s)' % (str(act), str(fmt))) 
     279 
     280        return True 
    219281 
    220282class AmazonBot(AmazonBotBase): 
     
    244306        return 'AmazonBot by %s, based on python-irclib' % __author__ 
    245307 
     308    def onmsg_reload(self, c, e, to, args): 
     309        """Syntax: !reload 
     310        """ 
     311        _debug('in reload command: %s', str(args)) 
     312        config.read() 
     313        c.notice(to, 'reloaded config') 
     314        return True 
     315 
     316    def onmsg_lt(self, c, e, to, args): return self.onmsg_localtime(c, e, to, args) 
     317    def onmsg_localtime(self, c, e, to, args): 
     318        """Syntax: !localtime <unix time> 
     319        """ 
     320        _debug('in localtime command: %s', str(args)) 
     321 
     322        _from = nm_to_n(e.source()) 
     323        try: 
     324            sec = float(args[0]) 
     325            c.notice(_from, time.strftime('%b %d %T', time.localtime(sec))) 
     326        except ValueError, e: 
     327            c.notice(_from, 'Invalid argument: %s' % args[0]) 
     328            return False 
     329 
     330        return True 
     331 
    246332    def onmsg_s(self, c, e, to, args): return self.onmsg_status(c, e, to, args) 
    247333    def onmsg_status(self, c, e, to, args): 
     
    385471        return [product_name, url] 
    386472 
     473    def onact_oper(self, msg, c, e, to): 
     474        nick = nm_to_n(e.source()) 
     475        _debug('in oper action: %s to %s in %s' % (msg, nick, to)) 
     476        c.notice(to, msg) 
     477        c.mode(to, '+o %s' % nick) 
     478        return True 
     479 
     480    def onact_nooper(self, msg, c, e, to): 
     481        nick = nm_to_n(e.source()) 
     482        _debug('in nooper action: %s to %s in %s' % (msg, nick, to)) 
     483        c.notice(to, msg) 
     484        c.mode(to, '-o %s' % nick) 
     485        return True 
     486 
     487    def onact_kick(self, msg, c, e, to): 
     488        nick = nm_to_n(e.source()) 
     489        _debug('in kick action: %s to %s in %s' % (msg, nick, to)) 
     490        c.kick(to, nick, msg) 
     491        return True 
     492 
     493    def onact_kick_and_invite(self, msg, c, e, to): 
     494        nick = nm_to_n(e.source()) 
     495        _debug('in kick_and_invite action: %s to %s in %s' % (msg, nick, to)) 
     496        c.kick(to, nick, msg) 
     497        c.invite(nick, to) 
     498        return True 
     499 
     500    NICK_TRANS_TABLE = string.maketrans('-_i1z2o0s5bdnmft', '_-1i2z0o5sdbmntf') 
     501    def onact_nick(self, msg, c, e, to): 
     502        nick   = nm_to_n(e.source()) 
     503        nickto = nick[0] + nick[1:].translate(self.NICK_TRANS_TABLE) 
     504        if nick == nickto: 
     505            nickto = nick + '_' 
     506        _debug('in nick action: %s to %s in %s (%s)' % (msg, nick, to, nickto)) 
     507        c.notice(to, msg) 
     508        c.nick(nickto) 
     509        return True 
     510 
     511    def onact_topic(self, msg, c, e, to): 
     512        nick = nm_to_n(e.source()) 
     513        _debug('in topic action: %s to %s in %s' % (msg, nick, to)) 
     514        c.topic(to, msg) 
     515        return True 
     516 
    387517if __name__ == '__main__': 
    388518    bot = AmazonBot() 
  • /trunk/amazonbot/my_amazon.py

    r8 r24  
    291291    u = urllib.FancyURLopener(proxies) 
    292292    usock = u.open(url) 
    293     xmldoc = minidom.parse(usock) 
     293    xmldoc = None 
     294    try: 
     295        xmldoc = minidom.parse(usock) 
     296    except: 
     297        raise AmazonError, 'XML Parsing Error' 
     298    if xmldoc is None: 
     299        raise AmazonError, 'XML Parsing Error (Result is None)' 
    294300 
    295301#     from xml.dom.ext import PrettyPrint 
  • /trunk/amazonbot/amazonbot.ini.sample

    r18 r22  
    11[amazon] 
    2 locale = jp 
     2locale     = jp 
    33access_key = your access key 
    44 
    55[irc] 
    6 server = irc.freenode.net 
    7 port = 6667 
     6server  = irc.freenode.net 
     7port    = 6667 
    88channel = #amazonbot 
    99 
    1010[bot] 
    11 nick = amazonbot 
    12 content = そんなアナタにこれがオススメ 
    13 thanks = ありがずう 
    14 sorry = 正盎すたんかった 
    15 bye = さようならたた䌚う日たで 
    16 active_pattern = ごめん|ゎメン|すたん|スマン|すいたせん 
    17 silent_pattern = 邪魔|じゃた|ゞャマ|うる(さい|せヌ)|だたれ 
     11nick           = amazonbot 
     12content        = そんなアナタにこれがオススメ 
     13thanks         = ありがずう 
     14sorry          = 正盎すたんかった 
     15bye            = さようならたた䌚う日たで 
     16no_products    = 芋぀かりたせんでした 
     17active_pattern = ((ごめん|ゎメン)(なさい)?|(すたん|スマン)|(す(い|み)たせん))[なよねヌ・ .。、!]*$ 
     18silent_pattern = (邪魔|じゃた|ゞャマ|うる(さい|せヌ)|だたれ)[だよなヌ-!]*$ 
     19 
     20[action0] 
     21input_pattern = お(早|はよ)うございたす 
     22message       = おはようございたす %s さん 
     23action        = oper 
     24start_time    = 06:00 
     25end_time      = 12:00 
     26 
     27[action1] 
     28input_pattern = もうひずいきじゃ.*パワヌをメテオに 
     29message       = いいですずも 
    1830 
    1931[freq] 
  • /trunk/amazonbot/config.py

    r8 r28  
    22 
    33__version__ = '$Revision$' 
    4 __author__ = 'Atzm WATANABE <sitosito@p.chan.ne.jp>' 
     4__author__ = 'Atzm WATANABE <atzm@atzm.org>' 
    55 
    66import os, ConfigParser 
    77 
    88_userconfig = 'amazonbot.ini' 
    9 _parser = ConfigParser.SafeConfigParser() 
     9_parser = ConfigParser.RawConfigParser() 
    1010 
    1111def set(sect, key, val): 
     
    3030                        return '' 
    3131 
     32def has_section(sect): 
     33    return _parser.has_section(sect) 
     34 
    3235def write(filename=''): 
    3336        if not filename: 
Note: See TracChangeset for help on using the changeset viewer.