def __init__(self, host, port): self.mgsside = "CLIENT" self.log = logbot.getlogger(self.mgsside) self.host = host self.port = port self.log.msg("Generating RSA key pair") self.rsakey = encryption.gen_rsa_key()
import operator import types from collections import defaultdict import twistedbot.logbot as logbot from twistedbot.packets import packets from twistedbot.packets import Container, Metadata from pynbt import NBTFile log = logbot.getlogger("-") ######################################################################################################### # ignore_packets = [0, 4, 11, 12, 13, 24, 28, 29, 30, 31, 32, 33, 34, 35, 62] #these bring a lot of noise # 0 keep alive # 4 time update # 11 player position # 12 player look # 13 player position&look # 24 spawn mob # 28 entity velocity # 29 desctoy entity # 30 entity # 31 entity relative move # 32 entity look # 33 entity look and relative move # 34 entity teleport # 35 entity head look # 62 named sound effect
# -*- coding: utf-8 -*- # section description for 'help' command. """..just an example plugin""" from twistedbot.behaviours import BehaviourBase from twistedbot import logbot log = logbot.getlogger("Example Plugin") def example(speaker, verb, data, interface): """Just logs a message when you say 'example' in chat.""" world, factory = interface.world, interface.factory full_data = verb + ' ' + data log.msg('Example works! Received "%s" from %s ' % (full_data, speaker)) class PluginBehaviour(BehaviourBase): pass verbs = {"example": example}
def __init__(self, proxyclient): self.mgsside = "SERVER" self.log = logbot.getlogger(self.mgsside) self.proxyclient = proxyclient
import syspath_fix syspath_fix.update_sys_path() import argparse from twisted.internet import reactor from twisted.internet.protocol import Protocol, Factory from twisted.internet.endpoints import TCP4ServerEndpoint, TCP4ClientEndpoint from twistedbot.packets import make_packet, parse_packets, packets from twistedbot import encryption from twistedbot import logbot log = logbot.getlogger("PROXY") class ProxyProtocol(Protocol): def dataReceived(self, bytestream): try: self.parser(bytestream) except: logbot.exit_on_error() def sendData(self, bytestream): if self.encryption_on: bytestream = self.cipher.encrypt(bytestream) self.transport.write(bytestream)
# -*- coding: utf-8 -*- """commands relating to inventory and manipulating objects""" from twistedbot.behaviours import BehaviourBase from twistedbot import logbot log = logbot.getlogger("INVENTORY PLUGIN") inventory_names = { 'armor': 'interface.inventory.armor', 'chest': '"<not yet implemented>"', 'general': 'interface.inventory.general', 'full': 'interface.inventory', 'ready': 'interface.inventory.ready', } def hold(speaker, verb, data, interface): """hold <item name> - Switch to that item (must be in ready inventory)""" item_name = data.strip() # Look for it in our ready inventory try: interface.hold(item_name, general_inventory=True) except Exception, e: if not str(e): raise interface.world.chat.send_message(str(e))
import twistedbot.logbot as logbot from twistedbot.plugins.base import load, PluginChatBase name = __name__.split('.')[-1] log = logbot.getlogger("%s PLUGINS" % name.upper()) plugs = load(log, __file__, name)
import signal import argparse import syspath_fix syspath_fix.update_sys_path() from twisted.internet import reactor from twisted.protocols import basic from twisted.internet.defer import inlineCallbacks import twistedbot.factory as factory import twistedbot.config as config import twistedbot.logbot as logbot from twistedbot.world import World log = logbot.getlogger("MAIN") class ConsoleChat(basic.LineReceiver): from os import linesep as delimiter def __init__(self, world): self.world = world def connectionMade(self): log.msg("terminal chat available") def lineReceived(self, line): try: self.world.chat.process_command_line(line) except Exception as e:
# -*- coding: utf-8 -*- """basic, inbuilt actions""" from twistedbot import behaviours from twistedbot.logbot import getlogger log = getlogger('SYSTEM PLUGINS') def rotate_and_circulate(user, verb, data, interface): """"rotate <group>" or "circulate <group>": follow signs in a group, in-order.""" if data: interface.world.bot.behaviour_tree.new_command( behaviours.WalkSignsBehaviour, group=data, type=verb) else: interface.world.chat.send_message("which sign group to %s?" % verb) def go(user, verb, data, interface): """"go <player>" or "go <sign>": go to a player or sign""" world, chat = interface.world, interface.world.chat if data: split_data = data.split() if len(split_data) == 2 and split_data[0] == 'to': if split_data[1] in world.entities.players: msg = ("I don't know how to go to other players yet.") chat.send_message(msg) else: world.bot.behaviour_tree.new_command(behaviours.GoToSignBehaviour, sign_name=data) else: interface.world.chat.send_message("go where?")
import sys import signal import multiprocessing from time import sleep from collections import deque from PyQt4 import QtGui from PyQt4 import QtCore import bot from twistedbot import logbot from twistedbot.utils import Message # from resources.splitimages import make_tiles log = logbot.getlogger("GUI") # example edit class MainWindow(QtGui.QMainWindow): def __init__(self, argv): QtGui.QMainWindow.__init__(self) self.to_bot = multiprocessing.Queue() self.to_gui = multiprocessing.Queue() # Start the bot bot_args = (argv, self.to_bot, self.to_gui) self.bot = multiprocessing.Process(target=bot.start, args=bot_args) self.bot.start()
# -*- coding: utf-8 -*- """programming tools - commander only""" from twistedbot.behaviours import BehaviourBase from twistedbot import logbot from twistedbot import config log = logbot.getlogger("DEBUG PLUGIN") def commander_only(method): def authorized_method(speaker, verb, data, interface): if speaker.lower() != config.COMMANDER.lower(): msg = "This command is commander-only (not for you)" interface.world.chat.send_message(msg) return return method(speaker, verb, data, interface) return authorized_method @commander_only def eid(speaker, verb, data, interface): """eid <number> - Display the entity referenced by the given entity id""" wfc = interface.world, interface.world.factory, interface.world.chat world, factory, chat = wfc try: eid = int(data.strip()) except ValueError: chat.send_message("Expected a number, but got '%s' instead." % data) return
import syspath_fix syspath_fix.update_sys_path() import argparse from twisted.internet import reactor from twisted.internet.protocol import Protocol, Factory from twistedbot.packets import make_packet, parse_packets, packets from twistedbot import encryption from twistedbot import logbot from twistedbot import config log = logbot.getlogger("PROXY") class ProxyProtocol(Protocol): def dataReceived(self, bytestream): try: self.parser(bytestream) except: logbot.exit_on_error() def sendData(self, bytestream): if self.encryption_on: bytestream = self.cipher.encrypt(bytestream) self.transport.write(bytestream) def parse_encrypted_stream(self, bytestream): plaintext = self.decipher.decrypt(bytestream)
import operator import types from collections import defaultdict import twistedbot.logbot as logbot from twistedbot.packets import packets from twistedbot.packets import Container, Metadata from pynbt import NBTFile log = logbot.getlogger("-") ######################################################################################################### # ignore_packets = [0, 4, 11, 12, 13, 24, 28, 29, 30, 31, 32, 33, 34, 35, 62] #these bring a lot of noise # 0 keep alive # 4 time update # 11 player position # 12 player look # 13 player position&look # 24 spawn mob # 28 entity velocity # 29 desctoy entity # 30 entity # 31 entity relative move # 32 entity look # 33 entity look and relative move # 34 entity teleport # 35 entity head look # 62 named sound effect #########################################################################################################
import argparse import syspath_fix syspath_fix.update_sys_path() from twisted.internet import reactor from twisted.protocols import basic from twistedbot.factory import MineCraftFactory from twistedbot.world import World import twistedbot.config as config import twistedbot.logbot as logbot log = logbot.getlogger("MAIN") class ConsoleChat(basic.LineReceiver): def __init__(self, world): self.world = world def lineReceived(self, line): try: self.world.chat.process_command(line) except Exception as e: logbot.exit_on_error(e) def start(): parser = argparse.ArgumentParser(description="Bot arguments.")
# -*- coding: utf-8 -*- # section description for 'help' command. """the help system""" from twistedbot import logbot log = logbot.getlogger("HELP PLUGIN") def help(speaker, verb, data, interface): """"help" or "help <section>" or "help <command>" or "help <section/command>" """ data = data.strip() if not data: help_msg = ["""Sections are:"""] for section in interface.behaviours: mod = interface.behaviours[section] help_msg.append(section + " - " + mod.__doc__ if mod.__doc__ else section) help_msg.append('Use "help <section>" for more info.') help_msg = '\n'.join(help_msg) elif '/' in data: section, command = [d.strip() for d in data.split('/'), 1] if section not in interface.behaviours: msg = "Unknown section for help: '%s'" % section interface.world.chat.send_message(msg) log.msg(msg) return verbs = interface.behaviours[section].verbs if command not in verbs: msg = "Unknown command for section %s: %s" % (section, command) interface.world.chat.send_message(msg) log.msg(msg) return