Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- ## SAMPLE PYTHON BOT ##
- # Made by asjaemrkqerozskj and N1xx1(Simosc)
- import re
- import hashlib
- import time
- import os
- import logging, logging.handlers
- import thread, threading
- import sqlite3
- import struct
- import random
- import unicodedata
- from datetime import datetime
- from twisted.internet import reactor, protocol
- import warnings
- from zope.interface import implements
- class TFMClientProtocol(protocol.Protocol):
- recvd = ""
- structFormat = "!I"
- def stringReceived(self, string):
- raise NotImplementedError
- def inforequestReceived(self, string):
- raise NotImplementedError
- def dataReceived(self, data):
- self.recvd += data
- while not self.recvd == "":
- datalength = len(self.recvd)
- if datalength>=4:
- packetlength = int((struct.unpack("%sL" % "!", self.recvd[:4]))[0])
- if datalength == packetlength:
- self.stringReceived(self.recvd[4:])
- self.recvd = ""
- elif datalength < packetlength:
- break
- else:
- self.stringReceived(self.recvd[4:packetlength])
- self.recvd = self.recvd[packetlength:]
- else:
- break
- def sendString(self, string):
- if len(string) >= 2 ** (8 * 4):
- raise StringTooLongError(
- "Try to send %s bytes whereas maximum is %s" % (
- len(string), 2 ** (8 * 4)))
- self.transport.write(
- struct.pack(self.structFormat, len(string)) + string)
- class BotClient(TFMClientProtocol):
- def __init__(self):
- self.username = "YOUR BOT NAME" #Put its name here
- self.password = "********" #Put its password here
- self.startroom = "my-bot" #Put its starting room here
- self.controlmouse="" #And put your name here
- self.controlplayercode = ""
- self.currentmap = ""
- self.requestinginfo = False
- self.parsingmaps = False
- self.recievedmap = False
- self.follow = False
- self.room = False
- def connectionMade(self):
- self.transport.write("\x00\x00\x00\x0C\x00\x00\x00\x00" + "\x1C" + "\x01" + struct.pack("!h", 154))
- self.TempsZeroBR = (time.time() * 1000)
- reactor.callLater(11, self.pingThread)
- def stringReceived(self, data):
- self.parseData(data)
- def sendOutput(self, string):
- print str(datetime.today())+" "+string
- def sendTZAT(self):
- self.sendData("\x1A" + "\x1A", True)
- def pingThread(self):
- Lasttime = int(time.time() * 1000)
- self.sendData("\x1A" + "\x02" + "\x01" + str(int(time.time() * 1000) - int(self.TempsZeroBR)), True)
- self.TempsZeroBR = Lasttime
- reactor.callLater(11, self.pingThread)
- def playerjoin(self,name):
- playerdbcur.execute('insert into joined(name,data) values(?, ?)',(name,"empty"))
- def sendData(self, data, isUTF):
- Pos = int((self.CMDTEC)%9000 + 1000)
- d1 = int(Pos / 1000)
- d2 = int(Pos / 100) % 10
- d3 = int(Pos / 10) % 10
- d4 = int(Pos % 10)
- mdtprefix = chr(int(self.MDT[d1])) + chr(int(self.MDT[d2])) + chr(int(self.MDT[d3])) + chr(int(self.MDT[d4]))
- self.CMDTEC += 1
- if isUTF:
- packetlength = struct.pack("!l", (len(data)+12))
- utflength = struct.pack("!h", len(data))
- self.transport.write(packetlength + mdtprefix + "\x01" + "\x01" + utflength + data)
- else:
- packetlength = struct.pack("!l", (len(data)+8))
- self.transport.write(packetlength + mdtprefix + data)
- def parseData(self, data):
- if data[0] == "\x01" and data[1] == "\x01":
- eventutflength = data[2:4]
- data = data[4:struct.unpack("!h", eventutflength)[0]+4]
- values = data.split("\x01")
- prefix = values.pop(0)
- else:
- prefix = data[:2]
- data = data[2:]
- #04 04 prefix
- if prefix[0] == "\x04":
- if prefix[1] == "\x04":
- pass
- else:
- pass
- elif prefix[0] == "\x05":
- #05 05 prefix
- if prefix[1] == "\x05":
- self.gamecode = values[2]
- elif prefix[1] == "\x14":
- self.itemnotrecieved = False
- else:
- pass
- elif prefix[0] == "\x06":
- if prefix[1] == "\x06":
- #Chat Message
- #Here's how to send a chat message:
- #message="Hi"
- #self.sendData("\x06\x06"+struct.pack('!h', len(message))+message, False)
- playercode=struct.unpack("!l", data[:4])[0]
- data=data[4:]
- utflength=struct.unpack("!h", data[:2])[0]
- name=str(data[2:int(utflength)+2])
- data=data[utflength+2:]
- utflength=struct.unpack("!h", data[:2])[0]
- message=data[2:utflength+2]
- self.sendOutput(name + ": " + message)
- elif prefix [1] == "\x07":
- #Whisper
- #Here's how to send a whisper:
- #name="Playername"
- #message="Hi"
- #self.sendData("\x06\x07"+struct.pack('!h', len(name))+name+struct.pack('!h', len(message))+message, False)
- msgtype=data[:1]
- data=data[1:]
- if msgtype == "\x00":
- utflength=struct.unpack("!h", data[:2])[0]
- name=str(data[2:int(utflength)+2])
- data=data[utflength+2:]
- utflength=struct.unpack("!h", data[:2])[0]
- message=data[2:utflength+2]
- self.sendOutput("To " + name + ": " + message)
- elif msgtype == "\x01":
- utflength=struct.unpack("!h", data[:2])[0]
- name=str(data[2:int(utflength)+2])
- data=data[utflength+2:]
- utflength=struct.unpack("!h", data[:2])[0]
- message=data[2:utflength+2]
- self.sendOutput("From " + name + ": " + message)
- else:
- print "Problably the player doesn't exist..."
- elif prefix [1] == "\x08":
- #Tribe Message
- #And here's how to send a tribe message:
- #message="Hi"
- #self.sendData("\x06\x08"+struct.pack('!h', len(message))+message, False)
- utflength=struct.unpack("!h", data[:2])[0]
- message=data[2:int(utflength)+2]
- data=data[utflength+2:]
- utflength=struct.unpack("!h", data[:2])[0]
- name=data[2:utflength+2]
- self.sendOutput("[Tribe] " + name + ": " + message)
- elif prefix [1] == "\x14":
- pass
- else:
- pass
- elif prefix[0] == "\x08":
- if prefix[1] == "\x05":
- #Player Died
- playerCode, AliveMiceCount, score = values
- elif prefix[1] == "\x06":
- #Player got in hole
- playerCode, AliveMiceCount, score, place, timeTaken = values
- elif prefix[1] == "\x07":
- #Remove player
- playerCode = values
- elif prefix[1] == "\x08":
- playerinfo = data.split("\x23")
- if playerinfo[0] == self.controlmouse:
- self.controlplayercode = playerinfo[1]
- else:
- pass
- elif prefix[1] == "\x09":
- playerdbcur.execute("delete from players")
- for player in values:
- playerdata = player.split("\x23")
- name = playerdata[0]
- playercode = playerdata[1]
- playerdbcur.execute("insert into players (name, playercode) values (?, ?)", (name, playercode))
- elif prefix[1] == "\x15":
- if str(values[0])==str(self.playerCode):
- pass
- else:
- pass
- elif prefix[0] == "\x10":
- if prefix[1] == "\x05":
- self.sendOutput("[Tribe] " + values[0] + ": " + values[1])
- else:
- pass
- elif prefix[0] == "\x1A":
- if prefix[1] == "\x1A":
- reactor.callLater(10, self.sendTZAT)
- elif prefix[1] == "\x1B":
- self.MDT = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
- LCDMT = values[1]
- self.CMDTEC = int(values[2])
- i = 0
- while(i < 10):
- self.CMDT = LCDMT[i]
- if self.CMDT == "0":
- self.MDT[i] = "10"
- else:
- self.MDT[i] = self.CMDT
- i = (i+1)
- self.login()
- elif prefix [1] == "\x08":
- self.playerCode=values[1]
- else:
- pass
- else:
- pass
- class BotFactory(protocol.ClientFactory):
- protocol = BotClient
- def clientConnectionLost(self, connector, reason):
- reactor.stop()
- print "Connection Lost :("
- def clientConnectionFailed(self, connector, reason):
- reactor.stop()
- if __name__ == '__main__':
- playerdb = sqlite3.connect(":memory:", check_same_thread = False)
- playerdb.isolation_level = None
- playerdbcur = playerdb.cursor()
- playerdb.row_factory = sqlite3.Row
- playerdbcur.execute("""create table players(name text, playercode text)""")
- f = BotFactory()
- reactor.connectTCP("91.121.157.83", 44444, f)
- print "\033[31;49;1mI'm online!\033[0m"
- reactor.run()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement