Advertisement
Guest User

Untitled

a guest
Sep 13th, 2017
141
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 9.86 KB | None | 0 0
  1. ## SAMPLE PYTHON BOT ##
  2. # Made by asjaemrkqerozskj and N1xx1(Simosc)
  3.  
  4. import re
  5. import hashlib
  6. import time
  7. import os
  8. import logging, logging.handlers
  9. import thread, threading
  10. import sqlite3
  11. import struct
  12. import random
  13. import unicodedata
  14. from datetime import datetime
  15. from twisted.internet import reactor, protocol
  16.  
  17. import warnings
  18. from zope.interface import implements
  19.  
  20. class TFMClientProtocol(protocol.Protocol):
  21.  
  22.     recvd = ""
  23.     structFormat = "!I"
  24.  
  25.     def stringReceived(self, string):
  26.         raise NotImplementedError
  27.  
  28.     def inforequestReceived(self, string):
  29.         raise NotImplementedError
  30.  
  31.     def dataReceived(self, data):
  32.         self.recvd += data
  33.         while not self.recvd == "":
  34.             datalength = len(self.recvd)
  35.             if datalength>=4:
  36.                 packetlength = int((struct.unpack("%sL" % "!", self.recvd[:4]))[0])
  37.                 if datalength == packetlength:
  38.                     self.stringReceived(self.recvd[4:])
  39.                     self.recvd = ""
  40.                 elif datalength < packetlength:
  41.                     break
  42.                 else:
  43.                     self.stringReceived(self.recvd[4:packetlength])
  44.                     self.recvd = self.recvd[packetlength:]
  45.             else:
  46.                 break
  47.  
  48.     def sendString(self, string):
  49.         if len(string) >= 2 ** (8 * 4):
  50.             raise StringTooLongError(
  51.                 "Try to send %s bytes whereas maximum is %s" % (
  52.                 len(string), 2 ** (8 * 4)))
  53.         self.transport.write(
  54.             struct.pack(self.structFormat, len(string)) + string)
  55.  
  56. class BotClient(TFMClientProtocol):
  57.  
  58.     def __init__(self):
  59.         self.username = "YOUR BOT NAME" #Put its name here
  60.         self.password = "********" #Put its password here
  61.         self.startroom = "my-bot" #Put its starting room here
  62.         self.controlmouse="" #And put your name here
  63.  
  64.         self.controlplayercode = ""
  65.         self.currentmap = ""
  66.         self.requestinginfo = False
  67.         self.parsingmaps = False
  68.         self.recievedmap = False
  69.         self.follow = False
  70.         self.room = False
  71.        
  72.  
  73.     def connectionMade(self):
  74.         self.transport.write("\x00\x00\x00\x0C\x00\x00\x00\x00" + "\x1C" + "\x01" + struct.pack("!h", 154))
  75.         self.TempsZeroBR = (time.time() * 1000)
  76.         reactor.callLater(11, self.pingThread)
  77.  
  78.     def stringReceived(self, data):
  79.         self.parseData(data)
  80.  
  81.     def sendOutput(self, string):
  82.         print str(datetime.today())+" "+string
  83.  
  84.     def sendTZAT(self):
  85.         self.sendData("\x1A" + "\x1A", True)
  86.  
  87.     def pingThread(self):
  88.         Lasttime = int(time.time() * 1000)
  89.         self.sendData("\x1A" + "\x02" + "\x01" + str(int(time.time() * 1000) - int(self.TempsZeroBR)), True)
  90.         self.TempsZeroBR = Lasttime
  91.         reactor.callLater(11, self.pingThread)
  92.  
  93.     def playerjoin(self,name):
  94.         playerdbcur.execute('insert into joined(name,data) values(?, ?)',(name,"empty"))
  95.    
  96.     def sendData(self, data, isUTF):
  97.         Pos = int((self.CMDTEC)%9000 + 1000)
  98.         d1 = int(Pos / 1000)
  99.         d2 = int(Pos / 100) % 10
  100.         d3 = int(Pos / 10) % 10
  101.         d4 = int(Pos % 10)
  102.         mdtprefix = chr(int(self.MDT[d1])) + chr(int(self.MDT[d2])) + chr(int(self.MDT[d3])) + chr(int(self.MDT[d4]))
  103.         self.CMDTEC += 1
  104.         if isUTF:
  105.             packetlength = struct.pack("!l", (len(data)+12))
  106.             utflength = struct.pack("!h", len(data))
  107.             self.transport.write(packetlength + mdtprefix + "\x01" + "\x01" + utflength + data)
  108.         else:
  109.             packetlength = struct.pack("!l", (len(data)+8))
  110.             self.transport.write(packetlength + mdtprefix + data)
  111.  
  112.     def parseData(self, data):
  113.  
  114.         if data[0] == "\x01" and data[1] == "\x01":
  115.             eventutflength = data[2:4]
  116.             data = data[4:struct.unpack("!h", eventutflength)[0]+4]
  117.             values = data.split("\x01")
  118.             prefix = values.pop(0)
  119.         else:
  120.             prefix = data[:2]
  121.             data = data[2:]
  122.  
  123.  
  124.         #04 04 prefix
  125.         if prefix[0] == "\x04":
  126.             if prefix[1] == "\x04":
  127.                 pass
  128.             else:
  129.                 pass
  130.  
  131.  
  132.         elif prefix[0] == "\x05":
  133.             #05 05 prefix
  134.             if prefix[1] == "\x05":
  135.                 self.gamecode = values[2]
  136.            
  137.             elif prefix[1] == "\x14":
  138.                 self.itemnotrecieved = False
  139.             else:
  140.                 pass
  141.  
  142.         elif prefix[0] == "\x06":
  143.             if prefix[1] == "\x06":
  144.                 #Chat Message
  145.                 #Here's how to send a chat message:
  146.                 #message="Hi"
  147.                 #self.sendData("\x06\x06"+struct.pack('!h', len(message))+message, False)
  148.                 playercode=struct.unpack("!l", data[:4])[0]
  149.                 data=data[4:]
  150.                 utflength=struct.unpack("!h", data[:2])[0]
  151.                 name=str(data[2:int(utflength)+2])
  152.                 data=data[utflength+2:]
  153.                 utflength=struct.unpack("!h", data[:2])[0]
  154.                 message=data[2:utflength+2]
  155.                 self.sendOutput(name + ": " + message)
  156.             elif prefix [1] == "\x07":
  157.                 #Whisper
  158.                 #Here's how to send a whisper:
  159.                 #name="Playername"
  160.                 #message="Hi"
  161.                 #self.sendData("\x06\x07"+struct.pack('!h', len(name))+name+struct.pack('!h', len(message))+message, False)
  162.                 msgtype=data[:1]
  163.                 data=data[1:]
  164.                 if msgtype == "\x00":
  165.                     utflength=struct.unpack("!h", data[:2])[0]
  166.                     name=str(data[2:int(utflength)+2])
  167.                     data=data[utflength+2:]
  168.                     utflength=struct.unpack("!h", data[:2])[0]
  169.                     message=data[2:utflength+2]
  170.                     self.sendOutput("To " + name + ": " + message)
  171.                 elif msgtype == "\x01":
  172.                     utflength=struct.unpack("!h", data[:2])[0]
  173.                     name=str(data[2:int(utflength)+2])
  174.                     data=data[utflength+2:]
  175.                     utflength=struct.unpack("!h", data[:2])[0]
  176.                     message=data[2:utflength+2]
  177.                     self.sendOutput("From " + name + ": " + message)
  178.                 else:
  179.                     print "Problably the player doesn't exist..."
  180.            
  181.             elif prefix [1] == "\x08":
  182.                 #Tribe Message
  183.                 #And here's how to send a tribe message:
  184.                 #message="Hi"
  185.                 #self.sendData("\x06\x08"+struct.pack('!h', len(message))+message, False)
  186.                 utflength=struct.unpack("!h", data[:2])[0]
  187.                 message=data[2:int(utflength)+2]
  188.                 data=data[utflength+2:]
  189.                 utflength=struct.unpack("!h", data[:2])[0]
  190.                 name=data[2:utflength+2]
  191.                 self.sendOutput("[Tribe] " + name + ": " + message)
  192.             elif prefix [1] == "\x14":
  193.                 pass
  194.             else:
  195.                 pass
  196.  
  197.         elif prefix[0] == "\x08":
  198.             if prefix[1] == "\x05":
  199.                 #Player Died
  200.                 playerCode, AliveMiceCount, score = values
  201.  
  202.             elif prefix[1] == "\x06":
  203.                 #Player got in hole
  204.                 playerCode, AliveMiceCount, score, place, timeTaken = values
  205.  
  206.             elif prefix[1] == "\x07":
  207.                 #Remove player
  208.                 playerCode = values
  209.             elif prefix[1] == "\x08":
  210.                 playerinfo = data.split("\x23")
  211.                 if playerinfo[0] == self.controlmouse:
  212.                     self.controlplayercode = playerinfo[1]
  213.                 else:
  214.                     pass
  215.             elif prefix[1] == "\x09":
  216.  
  217.                 playerdbcur.execute("delete from players")
  218.                 for player in values:
  219.                     playerdata = player.split("\x23")
  220.                     name = playerdata[0]
  221.                     playercode = playerdata[1]
  222.                     playerdbcur.execute("insert into players (name, playercode) values (?, ?)", (name, playercode))
  223.  
  224.             elif prefix[1] == "\x15":
  225.                 if str(values[0])==str(self.playerCode):
  226.                     pass
  227.             else:
  228.                 pass
  229.  
  230.         elif prefix[0] == "\x10":
  231.             if prefix[1] == "\x05":
  232.                 self.sendOutput("[Tribe] " + values[0] + ": " + values[1])
  233.             else:
  234.                 pass
  235.  
  236.         elif prefix[0] == "\x1A":
  237.             if prefix[1] == "\x1A":
  238.                 reactor.callLater(10, self.sendTZAT)
  239.             elif prefix[1] == "\x1B":
  240.                 self.MDT = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
  241.                 LCDMT = values[1]
  242.                 self.CMDTEC = int(values[2])
  243.                 i = 0
  244.                 while(i < 10):
  245.                     self.CMDT = LCDMT[i]
  246.                     if self.CMDT == "0":
  247.                         self.MDT[i] = "10"
  248.                     else:
  249.                         self.MDT[i] = self.CMDT
  250.                     i = (i+1)
  251.                 self.login()
  252.             elif prefix [1] == "\x08":
  253.                 self.playerCode=values[1]
  254.             else:
  255.                 pass
  256.         else:
  257.             pass
  258.  
  259. class BotFactory(protocol.ClientFactory):
  260.     protocol = BotClient
  261.     def clientConnectionLost(self, connector, reason):
  262.         reactor.stop()
  263.         print "Connection Lost :("
  264.     def clientConnectionFailed(self, connector, reason):
  265.         reactor.stop()
  266.  
  267. if __name__ == '__main__':
  268.     playerdb = sqlite3.connect(":memory:", check_same_thread = False)
  269.     playerdb.isolation_level = None
  270.     playerdbcur = playerdb.cursor()
  271.     playerdb.row_factory = sqlite3.Row
  272.     playerdbcur.execute("""create table players(name text, playercode text)""")
  273.  
  274.     f = BotFactory()
  275.     reactor.connectTCP("91.121.157.83", 44444, f)
  276.     print "\033[31;49;1mI'm online!\033[0m"
  277.     reactor.run()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement