summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSean B. Palmer <http://inamidst.com/sbp/>2008-03-02 11:16:25 +0000
committerSean B. Palmer <http://inamidst.com/sbp/>2008-03-02 11:16:25 +0000
commit23c1dffa101536889dd6bcef198233ee980add7f (patch)
treea60d4934705193bd282f002708c9e34c3b80191e
parent1078791cb60d3ce4543d579fc07b9c0c145e8d10 (diff)
downloadbot-23c1dffa101536889dd6bcef198233ee980add7f.tar.gz
bot-23c1dffa101536889dd6bcef198233ee980add7f.tar.bz2
bot-23c1dffa101536889dd6bcef198233ee980add7f.zip
Fixed some .u stuff, added .bytes, and made Ctrl+C work.
-rwxr-xr-x__init__.py20
-rwxr-xr-xmodules/codepoints.py46
2 files changed, 53 insertions, 13 deletions
diff --git a/__init__.py b/__init__.py
index 8137683..752fd02 100755
--- a/__init__.py
+++ b/__init__.py
@@ -7,9 +7,26 @@ Licensed under the Eiffel Forum License 2.
http://inamidst.com/phenny/
"""
-import sys, time, threading
+import sys, os, time, threading, signal
import bot
+class Watcher(object):
+ # Cf. http://aspn.activestate.com/ASPN/Cookbook/Python/Recipe/496735
+ def __init__(self):
+ self.child = os.fork()
+ if self.child != 0:
+ self.watch()
+
+ def watch(self):
+ try: os.wait()
+ except KeyboardInterrupt:
+ self.kill()
+ sys.exit()
+
+ def kill(self):
+ try: os.kill(self.child, signal.SIGKILL)
+ except OSError: pass
+
def run_phenny(config):
if hasattr(config, 'delay'):
delay = config.delay
@@ -19,6 +36,7 @@ def run_phenny(config):
p = bot.Phenny(config)
p.run(config.host)
+ Watcher()
while True:
connect(config)
if not isinstance(delay, int): break
diff --git a/modules/codepoints.py b/modules/codepoints.py
index f2eb862..89ea078 100755
--- a/modules/codepoints.py
+++ b/modules/codepoints.py
@@ -11,7 +11,8 @@ import re, unicodedata
from itertools import islice
def about(u, cp=None, name=None):
- if cp is None: cp = ord(u)
+ if cp is None:
+ cp = ord(u)
if name is None:
try: name = unicodedata.name(u)
except ValueError:
@@ -65,16 +66,27 @@ def codepoint_extended(arg):
def u(phenny, input):
arg = input.bytes[3:]
-
- ascii = True
- for c in arg:
- if ord(c) >= 0x80:
- ascii = False
-
- if ascii:
- if set(arg.upper()) - set('ABCDEFGHIJKLMNOPQRSTUVWXYZ '):
- extended = True
- else: extended = False
+ # phenny.msg('#inamidst', '%r' % arg)
+ if not arg:
+ return phenny.reply('You gave me zero length input.')
+
+ # @@ space
+ if set(arg.upper()) - set(
+ 'ABCDEFGHIJKLMNOPQRSTUVWYXYZ0123456789- .?+*{}[]\\/^$'):
+ printable = False
+ else: printable = True
+
+ if printable:
+ extended = False
+ for c in '.?+*{}[]\\/^$':
+ if c in arg:
+ extended = True
+ break
+
+ if len(arg) == 4:
+ try: u = unichr(int(arg, 16))
+ except ValueError: pass
+ else: return phenny.say(about(u))
if extended:
# look up a codepoint with regexp
@@ -84,6 +96,8 @@ def u(phenny, input):
phenny.say(result)
elif (i == 2) and (len(results) > 3):
phenny.say(result + ' [...]')
+ if not results:
+ phenny.reply('Sorry, no results')
else:
# look up a codepoint freely
result = codepoint_simple(arg)
@@ -97,7 +111,15 @@ def u(phenny, input):
for u in text:
phenny.say(about(u))
# look up more than three podecoints
- elif len(text) <= 8:
+ elif len(text) <= 10:
phenny.reply(' '.join('U+%04X' % ord(c) for c in text))
else: phenny.reply('Sorry, your input is too long!')
u.commands = ['u']
+
+def bytes(phenny, input):
+ b = input.bytes
+ phenny.reply('%r' % b[b.find(' ') + 1:])
+bytes.commands = ['bytes']
+
+if __name__ == '__main__':
+ print __doc__.strip()