__author__ = u"Steffen Vogel" __copyright__ = u"Copyright 2015, Steffen Vogel" __license__ = u"GPLv3" __maintainer__ = u"Steffen Vogel" __email__ = u"post@steffenvogel.de" u""" This file is part of transWhat transWhat is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or any later version. transwhat is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with transWhat. If not, see . """ import threading import inspect import re import urllib import time import os import utils class Bot(): def __init__(self, session, name = u"Bot"): self.session = session self.name = name self.commands = { u"help": self._help, u"prune": self._prune, u"groups": self._groups, u"getgroups": self._getgroups } def parse(self, message): args = message.split(u" ") cmd = args.pop(0) if cmd[0] == u'\\': try: self.call(cmd[1:], args) except KeyError: self.send(u"invalid command") except TypeError: self.send(u"invalid syntax") else: self.send(u"a valid command starts with a backslash") def call(self, cmd, args = []): func = self.commands[cmd] spec = inspect.getargspec(func) maxs = len(spec.args) - 1 reqs = maxs - len(spec.defaults or []) if (reqs > len(args)) or (len(args) > maxs): raise TypeError() thread = threading.Thread(target=func, args=tuple(args)) thread.start() def send(self, message): self.session.backend.handleMessage(self.session.user, self.name, message) # commands def _help(self): self.send(u"""following bot commands are available: \\help show this message \\prune clear your buddylist following user commands are available: \\lastseen request last online timestamp from buddy following group commands are available \\leave permanently leave group chat \\groups print all attended groups \\getgroups get current groups from WA""") def _prune(self): self.session.buddies.prune() self.session.updateRoster() self.send(u"buddy list cleared") def _groups(self): for group in self.session.groups: buddy = self.session.groups[group].owner try: nick = self.session.buddies[buddy].nick except KeyError: nick = buddy self.send(self.session.groups[group].id + u"@" + self.session.backend.spectrum_jid + u" " + self.session.groups[group].subject + u" Owner: " + nick ) def _getgroups(self): #self.session.call(u"group_getGroups", (u"participating",)) self.session.requestGroupsList(self.session._updateGroups)