Skip to content

Instantly share code, notes, and snippets.

@oprypin
Created December 16, 2014 15:05
Show Gist options
  • Save oprypin/51e13bc0bcc1326a5297 to your computer and use it in GitHub Desktop.
Save oprypin/51e13bc0bcc1326a5297 to your computer and use it in GitHub Desktop.
Skype Bot that matches inconsistent number of brackets in received messages as a protest to eyeless emoticons ")))"
#!/usr/bin/env python2
import re
import unicodedata
import Skype4Py
emoticons = open('emoticons.txt').read().split()
emoticons_re = r'(' + '|'.join(re.escape(' '.join(e)).replace(' ', ' ?') for e in emoticons) + r')'
emoticons_re = re.compile(emoticons_re)
brackets = open('brackets.txt').read().splitlines()
brackets = (unicodedata.lookup(name) for name in brackets)
brackets = list(zip(brackets, brackets))
def botmsg(msg):
msg = emoticons_re.sub('', msg)
result = ''
for a, b in brackets:
na, nb = msg.count(a), msg.count(b)
if na>nb:
result += b*(na-nb)
elif nb>na:
result += a*(nb-na)
return result or None
class SkypeBot(object):
def __init__(self):
self.skype = Skype4Py.Skype(Events=self)
self.skype.Attach()
def AttachmentStatus(self, status):
if status == Skype4Py.apiAttachAvailable:
self.skype.Attach()
def MessageStatus(self, msg, status):
if status == Skype4Py.cmsReceived:
body = botmsg(msg.Body)
if body:
msg.Chat.SendMessage(body)
if __name__ == "__main__":
import time
bot_ = SkypeBot()
while True:
time.sleep(1.0)
LEFT PARENTHESIS
RIGHT PARENTHESIS
LEFT SQUARE BRACKET
RIGHT SQUARE BRACKET
LEFT CURLY BRACKET
RIGHT CURLY BRACKET
TIBETAN MARK GUG RTAGS GYON
TIBETAN MARK GUG RTAGS GYAS
TIBETAN MARK ANG KHANG GYON
TIBETAN MARK ANG KHANG GYAS
OGHAM FEATHER MARK
OGHAM REVERSED FEATHER MARK
LEFT SQUARE BRACKET WITH QUILL
RIGHT SQUARE BRACKET WITH QUILL
SUPERSCRIPT LEFT PARENTHESIS
SUPERSCRIPT RIGHT PARENTHESIS
SUBSCRIPT LEFT PARENTHESIS
SUBSCRIPT RIGHT PARENTHESIS
LEFT CEILING
RIGHT CEILING
LEFT FLOOR
RIGHT FLOOR
LEFT-POINTING ANGLE BRACKET
RIGHT-POINTING ANGLE BRACKET
MEDIUM LEFT PARENTHESIS ORNAMENT
MEDIUM RIGHT PARENTHESIS ORNAMENT
MEDIUM FLATTENED LEFT PARENTHESIS ORNAMENT
MEDIUM FLATTENED RIGHT PARENTHESIS ORNAMENT
MEDIUM LEFT-POINTING ANGLE BRACKET ORNAMENT
MEDIUM RIGHT-POINTING ANGLE BRACKET ORNAMENT
HEAVY LEFT-POINTING ANGLE QUOTATION MARK ORNAMENT
HEAVY RIGHT-POINTING ANGLE QUOTATION MARK ORNAMENT
HEAVY LEFT-POINTING ANGLE BRACKET ORNAMENT
HEAVY RIGHT-POINTING ANGLE BRACKET ORNAMENT
LIGHT LEFT TORTOISE SHELL BRACKET ORNAMENT
LIGHT RIGHT TORTOISE SHELL BRACKET ORNAMENT
MEDIUM LEFT CURLY BRACKET ORNAMENT
MEDIUM RIGHT CURLY BRACKET ORNAMENT
LEFT S-SHAPED BAG DELIMITER
RIGHT S-SHAPED BAG DELIMITER
MATHEMATICAL LEFT WHITE SQUARE BRACKET
MATHEMATICAL RIGHT WHITE SQUARE BRACKET
MATHEMATICAL LEFT ANGLE BRACKET
MATHEMATICAL RIGHT ANGLE BRACKET
MATHEMATICAL LEFT DOUBLE ANGLE BRACKET
MATHEMATICAL RIGHT DOUBLE ANGLE BRACKET
MATHEMATICAL LEFT WHITE TORTOISE SHELL BRACKET
MATHEMATICAL RIGHT WHITE TORTOISE SHELL BRACKET
MATHEMATICAL LEFT FLATTENED PARENTHESIS
MATHEMATICAL RIGHT FLATTENED PARENTHESIS
LEFT WHITE CURLY BRACKET
RIGHT WHITE CURLY BRACKET
LEFT WHITE PARENTHESIS
RIGHT WHITE PARENTHESIS
Z NOTATION LEFT IMAGE BRACKET
Z NOTATION RIGHT IMAGE BRACKET
Z NOTATION LEFT BINDING BRACKET
Z NOTATION RIGHT BINDING BRACKET
LEFT SQUARE BRACKET WITH UNDERBAR
RIGHT SQUARE BRACKET WITH UNDERBAR
LEFT SQUARE BRACKET WITH TICK IN TOP CORNER
RIGHT SQUARE BRACKET WITH TICK IN BOTTOM CORNER
LEFT SQUARE BRACKET WITH TICK IN BOTTOM CORNER
RIGHT SQUARE BRACKET WITH TICK IN TOP CORNER
LEFT ANGLE BRACKET WITH DOT
RIGHT ANGLE BRACKET WITH DOT
LEFT ARC LESS-THAN BRACKET
RIGHT ARC GREATER-THAN BRACKET
DOUBLE LEFT ARC GREATER-THAN BRACKET
DOUBLE RIGHT ARC LESS-THAN BRACKET
LEFT BLACK TORTOISE SHELL BRACKET
RIGHT BLACK TORTOISE SHELL BRACKET
LEFT WIGGLY FENCE
RIGHT WIGGLY FENCE
LEFT DOUBLE WIGGLY FENCE
RIGHT DOUBLE WIGGLY FENCE
LEFT-POINTING CURVED ANGLE BRACKET
RIGHT-POINTING CURVED ANGLE BRACKET
TOP LEFT HALF BRACKET
TOP RIGHT HALF BRACKET
BOTTOM LEFT HALF BRACKET
BOTTOM RIGHT HALF BRACKET
LEFT SIDEWAYS U BRACKET
RIGHT SIDEWAYS U BRACKET
LEFT DOUBLE PARENTHESIS
RIGHT DOUBLE PARENTHESIS
LEFT ANGLE BRACKET
RIGHT ANGLE BRACKET
LEFT DOUBLE ANGLE BRACKET
RIGHT DOUBLE ANGLE BRACKET
LEFT CORNER BRACKET
RIGHT CORNER BRACKET
LEFT WHITE CORNER BRACKET
RIGHT WHITE CORNER BRACKET
LEFT BLACK LENTICULAR BRACKET
RIGHT BLACK LENTICULAR BRACKET
LEFT TORTOISE SHELL BRACKET
RIGHT TORTOISE SHELL BRACKET
LEFT WHITE LENTICULAR BRACKET
RIGHT WHITE LENTICULAR BRACKET
LEFT WHITE TORTOISE SHELL BRACKET
RIGHT WHITE TORTOISE SHELL BRACKET
LEFT WHITE SQUARE BRACKET
RIGHT WHITE SQUARE BRACKET
SMALL LEFT PARENTHESIS
SMALL RIGHT PARENTHESIS
SMALL LEFT CURLY BRACKET
SMALL RIGHT CURLY BRACKET
SMALL LEFT TORTOISE SHELL BRACKET
SMALL RIGHT TORTOISE SHELL BRACKET
FULLWIDTH LEFT PARENTHESIS
FULLWIDTH RIGHT PARENTHESIS
FULLWIDTH LEFT SQUARE BRACKET
FULLWIDTH RIGHT SQUARE BRACKET
FULLWIDTH LEFT CURLY BRACKET
FULLWIDTH RIGHT CURLY BRACKET
FULLWIDTH LEFT WHITE PARENTHESIS
FULLWIDTH RIGHT WHITE PARENTHESIS
HALFWIDTH LEFT CORNER BRACKET
HALFWIDTH RIGHT CORNER BRACKET
SINGLE LEFT-POINTING ANGLE QUOTATION MARK
SINGLE RIGHT-POINTING ANGLE QUOTATION MARK
LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
TOP PARENTHESIS
BOTTOM PARENTHESIS
TOP SQUARE BRACKET
BOTTOM SQUARE BRACKET
TOP CURLY BRACKET
BOTTOM CURLY BRACKET
TOP TORTOISE SHELL BRACKET
BOTTOM TORTOISE SHELL BRACKET
PRESENTATION FORM FOR VERTICAL LEFT CORNER BRACKET
PRESENTATION FORM FOR VERTICAL RIGHT CORNER BRACKET
PRESENTATION FORM FOR VERTICAL LEFT WHITE CORNER BRACKET
PRESENTATION FORM FOR VERTICAL RIGHT WHITE CORNER BRACKET
PRESENTATION FORM FOR VERTICAL LEFT TORTOISE SHELL BRACKET
PRESENTATION FORM FOR VERTICAL RIGHT TORTOISE SHELL BRACKET
PRESENTATION FORM FOR VERTICAL LEFT BLACK LENTICULAR BRACKET
PRESENTATION FORM FOR VERTICAL RIGHT BLACK LENTICULAR BRACKET
PRESENTATION FORM FOR VERTICAL LEFT WHITE LENTICULAR BRACKET
PRESENTATION FORM FOR VERTICAL RIGHT WHITE LENTICULAR BRAKCET
PRESENTATION FORM FOR VERTICAL LEFT ANGLE BRACKET
PRESENTATION FORM FOR VERTICAL RIGHT ANGLE BRACKET
PRESENTATION FORM FOR VERTICAL LEFT DOUBLE ANGLE BRACKET
PRESENTATION FORM FOR VERTICAL RIGHT DOUBLE ANGLE BRACKET
PRESENTATION FORM FOR VERTICAL LEFT SQUARE BRACKET
PRESENTATION FORM FOR VERTICAL RIGHT SQUARE BRACKET
PRESENTATION FORM FOR VERTICAL LEFT CURLY BRACKET
PRESENTATION FORM FOR VERTICAL RIGHT CURLY BRACKET
LEFT LOW PARAPHRASE BRACKET
RIGHT LOW PARAPHRASE BRACKET
LEFT RAISED OMISSION BRACKET
RIGHT RAISED OMISSION BRACKET
LEFT SUBSTITUTION BRACKET
RIGHT SUBSTITUTION BRACKET
LEFT DOTTED SUBSTITUTION BRACKET
RIGHT DOTTED SUBSTITUTION BRACKET
LEFT TRANSPOSITION BRACKET
RIGHT TRANSPOSITION BRACKET
:) :=) :-) (: (-: =) (=
:( :=( :-( ): )-: =( )=
8=) 8-) B=) B-)
;) ;-) ;=) (; (-;
;( ;-( ;=( ); )-;
(:|
:">
:^)
|-) I-) I=)
|( |-( |=(
]:) >:)
x( x-( x=( X( X- (X=(
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment