Skip to content

Instantly share code, notes, and snippets.

@matsub
Created June 14, 2016 16:09
Show Gist options
  • Save matsub/74830d376b191a74a197fec3b0606393 to your computer and use it in GitHub Desktop.
Save matsub/74830d376b191a74a197fec3b0606393 to your computer and use it in GitHub Desktop.
A Skype Bot with Skype4Py (in Python 2.x).
#!/usr/bin/env python2
# coding: utf-8
import re
import time
import logging
import functools
import Skype4Py
logger = logging.getLogger(__name__)
logger.setLevel(logging.INFO)
log_handler = logging.StreamHandler()
log_handler.setLevel(logging.INFO)
logger.addHandler(log_handler)
is_cmd = re.compile('^#.*')
memory = {
'command': dict(),
'chat': dict()
}
def command(trigger):
def register(func):
@functools.wraps(func)
def wrapper(*args, **kw):
return func(*args, **kw)
memory['command'][trigger] = wrapper
return wrapper
return register
def chat(trigger):
def register(func):
@functools.wraps(func)
def wrapper(*args, **kw):
return func(*args, **kw)
pattern = re.compile(trigger)
memory['chat'][pattern] = wrapper
return wrapper
return register
def call_command(msg):
divided = msg.Body.split()
cmd = divided[0].lstrip('#')
opt = divided[1:]
try:
call = memory['command'][cmd]
msg.Chat.SendMessage(call(opt))
except KeyError:
msg.Chat.SendMessage(u'command not found.')
return
def call_chat(msg):
for trigger, call in memory['chat'].items():
if trigger.match(msg.Body):
speech = call(msg)
if speech:
msg.Chat.SendMessage(speech)
return
def handler(msg, event):
if event == Skype4Py.enums.cmsReceived:
if is_cmd.match(msg.Body):
return call_command(msg)
return call_chat(msg)
def run():
skype = Skype4Py.Skype()
skype.Attach()
skype.OnMessageStatus = handler
logger.info('Bot Activated.')
while True:
try:
time.sleep(0.25)
except KeyboardInterrupt:
logger.info('Now stopping Skype bot...')
exit()
#!/usr/bin/env python2
# coding: utf-8
import logging
import core
logger = logging.getLogger(__name__)
logger.setLevel(logging.INFO)
log_handler = logging.StreamHandler()
log_handler.setLevel(logging.INFO)
logger.addHandler(log_handler)
# ping
@core.command('ping')
def ping(args):
return u'pong'
# chat
@core.chat(u'yo.')
def chat_yo(msg):
return u'hey.'
def run():
logger.info('starting bot...')
core.run()
logger.info('bot down.')
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment