Created
June 14, 2016 16:09
-
-
Save matsub/74830d376b191a74a197fec3b0606393 to your computer and use it in GitHub Desktop.
A Skype Bot with Skype4Py (in Python 2.x).
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/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() |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/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