def _message(self, req): output = Output() for bot in bots.all(): code = bot['code'] try: env = Env(code, bot['name'], bot['user']) env.onMessage(req['name'], req['message']) bots.update_lastsaid(bot['name'], env.output.lastsaid) output.combine(env.output) except Exception as e: res = self._removebot(bot, e) output.pms.update(res['pms']) continue return output.serialize()
def _removebot(self, req, e=None): name = req['name'] bot = bots.get(name) user = bot['user'] code = bot['code'] output = Output() # remove the bot if e: m = 'ERROR in bot `{0}`: {1}\n{2}'.format(name, str(e), traceback.format_exc()) output.pms.setdefault(user, []).append(m) m = ('Bot `{0}` was killed due to errors.\n' + 'Here lies its code:\n{1}').format(name, code) output.pms[user].append(m) bots.remove(name) return output.serialize()