diff --git a/modules/admin.py b/modules/admin.py index de2a7a7..24b8fb6 100755 --- a/modules/admin.py +++ b/modules/admin.py @@ -8,22 +8,27 @@ http://inamidst.com/phenny/ """ def join(phenny, input): + """Join the specified channel. This is an admin-only command.""" # Can only be done in privmsg by an admin if input.sender.startswith('#'): return if input.admin: phenny.write(['JOIN'], input.group(2)) join.commands = ['join'] join.priority = 'low' +join.example = '.join #example' def part(phenny, input): + """Part the specified channel. This is an admin-only command.""" # Can only be done in privmsg by an admin if input.sender.startswith('#'): return if input.admin: phenny.write(['PART'], input.group(2)) part.commands = ['part'] part.priority = 'low' +part.example = '.part #example' def quit(phenny, input): + """Quit from the server. This is an owner-only command.""" # Can only be done in privmsg by the owner if input.sender.startswith('#'): return if input.owner: diff --git a/modules/calc.py b/modules/calc.py index 8e7caea..9a3b174 100755 --- a/modules/calc.py +++ b/modules/calc.py @@ -28,6 +28,7 @@ subs = [ ] def calc(phenny, input): + """Use the Frink online calculator.""" q = input.group(2) if not q: return phenny.say('0?') @@ -63,6 +64,7 @@ def calc(phenny, input): phenny.say(q + ' = ' + result) else: phenny.reply("Sorry, can't calculate that.") calc.commands = ['calc'] +calc.example = '.calc 5 + 3' if __name__ == '__main__': print __doc__.strip() diff --git a/modules/clock.py b/modules/clock.py index 9e38d7b..2ef6b21 100755 --- a/modules/clock.py +++ b/modules/clock.py @@ -186,7 +186,7 @@ TimeZones.update(TZ1) @deprecated def f_time(self, origin, match, args): - """.t [ ] - Returns the current time""" + """Returns the current time.""" tz = match.group(2) or 'GMT' # Personal time zones, because they're rad @@ -231,8 +231,11 @@ def f_time(self, origin, match, args): msg = time.strftime("%a, %d %b %Y %H:%M:%S " + str(tz), timenow) self.msg(origin.sender, msg) f_time.commands = ['t'] +f_time.name = 't' +f_time.example = '.t UTC' def beats(phenny, input): + """Shows the internet time in Swatch beats.""" beats = ((time.time() + 3600) % 86400) / 86.4 beats = int(math.floor(beats)) phenny.say('@%03i' % beats) @@ -243,6 +246,7 @@ def divide(input, by): return (input / by), (input % by) def yi(phenny, input): + """Shows whether it is currently yi or not.""" quadraels, remainder = divide(int(time.time()), 1753200) raels = quadraels * 4 extraraels, remainder = divide(remainder, 432000) @@ -255,6 +259,7 @@ yi.priority = 'low' # d8uv d8uv d8uv d8uv d8uv d8uv d8uv def tock(phenny, input): + """Shows the time from the USNO's atomic clock.""" u = urllib.urlopen('http://tycho.usno.navy.mil/cgi-bin/timer.pl') info = u.info() u.close() diff --git a/modules/codepoints.py b/modules/codepoints.py index 89ea078..797fada 100755 --- a/modules/codepoints.py +++ b/modules/codepoints.py @@ -65,6 +65,7 @@ def codepoint_extended(arg): yield about(u, cp, name) def u(phenny, input): + """Look up unicode information.""" arg = input.bytes[3:] # phenny.msg('#inamidst', '%r' % arg) if not arg: @@ -115,11 +116,14 @@ def u(phenny, input): phenny.reply(' '.join('U+%04X' % ord(c) for c in text)) else: phenny.reply('Sorry, your input is too long!') u.commands = ['u'] +u.example = '.u 203D' def bytes(phenny, input): + """Show the input as pretty printed bytes.""" b = input.bytes phenny.reply('%r' % b[b.find(' ') + 1:]) bytes.commands = ['bytes'] +bytes.example = '.bytes \xe3\x8b\xa1' if __name__ == '__main__': print __doc__.strip() diff --git a/modules/head.py b/modules/head.py index 10a5337..2552d6f 100755 --- a/modules/head.py +++ b/modules/head.py @@ -67,7 +67,9 @@ def f_title(self, origin, match, args): uri = (uri or '').encode('utf-8') if not uri and hasattr(self, 'last_seen_uri'): - uri = self.last_seen_uri + uri = self.last_seen_uri.get('#swhack') + if not uri: + return phenny.msg(origin.sender, 'I need a URI to give the title of...') if not ':' in uri: uri = 'http://' + uri @@ -140,7 +142,9 @@ f_title.commands = ['title'] def noteuri(phenny, input): uri = input.group(1).encode('utf-8') - phenny.bot.last_seen_uri = uri + if not hasattr(phenny.bot, 'last_seen_uri'): + phenny.bot.last_seen_uri = {} + phenny.bot.last_seen_uri[input.sender] = uri noteuri.rule = r'.*(http://[^<> "]+)[,.]?' noteuri.priority = 'low' diff --git a/modules/info.py b/modules/info.py index 932ac2f..a40a34f 100755 --- a/modules/info.py +++ b/modules/info.py @@ -41,6 +41,7 @@ help.rule = ('$nick', r'(?i)help(?:[?!]+)?$') help.priority = 'low' def stats(phenny, input): + """Show information on command usage patterns.""" commands = {} users = {} channels = {} diff --git a/modules/search.py b/modules/search.py index 856d3db..fbd6596 100755 --- a/modules/search.py +++ b/modules/search.py @@ -48,6 +48,7 @@ def formatnumber(n): return ''.join(parts) def g(phenny, input): + """Queries Google for the specified input.""" query = input.group(2) if not query: return phenny.reply('.g what?') @@ -57,8 +58,10 @@ def g(phenny, input): else: phenny.reply("No results found for '%s'." % query) g.commands = ['g'] g.priority = 'high' +g.example = '.g swhack' def gc(phenny, input): + """Returns the number of Google results for the specified input.""" query = input.group(2) if not query: return phenny.reply('.gc what?') @@ -66,6 +69,7 @@ def gc(phenny, input): phenny.say(query + ': ' + num) gc.commands = ['gc'] gc.priority = 'high' +gc.example = '.gc extrapolate' r_query = re.compile( r'\+?"[^"\\]*(?:\\.[^"\\]*)*"|\[[^]\\]*(?:\\.[^]\\]*)*\]|\S+' diff --git a/modules/tell.py b/modules/tell.py index e4af264..dc8ea46 100755 --- a/modules/tell.py +++ b/modules/tell.py @@ -40,7 +40,8 @@ def dumpReminders(fn, data): for remindon in data[tellee]: line = '\t'.join((tellee,) + remindon) f.write(line + '\n') - f.close() + try: f.close() + except IOError: pass return True def setup(self): diff --git a/modules/weather.py b/modules/weather.py index 77f0fd0..787551c 100755 --- a/modules/weather.py +++ b/modules/weather.py @@ -84,6 +84,9 @@ def f_weather(self, origin, match, args): if args[0].startswith('.weather '): return icao_code = match.group(2) + if not icao_code: + return self.msg(origin.sender, 'Try .weather London, for example?') + if (not len(icao_code) == 4) or \ (len(icao_code) > 1 and icao_code[0] in 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' and icao_code[1] in 'abcdefghijklmnopqrstuvwxyz'): diff --git a/phenny b/phenny index 8b3748a..0137239 100755 --- a/phenny +++ b/phenny @@ -29,6 +29,7 @@ def create_default_config(fn): host = 'irc.example.net' channels = ['#example', '#test'] owner = 'yournickname' + # serverpass = 'yourserverpassword' # These are people who will be able to use admin.py's functions... admins = [owner, 'someoneyoutrust']