async def bedrockping(self, ctx, server: str): ping = UNCONNECTED_PING() ping.pingID = 4201 ping.encode() s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) s.setblocking(0) try: s.sendto(ping.buffer, (socket.gethostbyname(server), 19132)) await asyncio.sleep(.75) recvData = s.recvfrom(2048) except BlockingIOError: await ctx.send(embed=discord.Embed( color=discord.Color.green(), description="**" + server + "** is either offline or unavailable at the moment. Did you type the ip correctly?" )) return except socket.gaierror: await ctx.send(embed=discord.Embed( color=discord.Color.green(), description="**" + server + "** is either offline or unavailable at the moment. Did you type the ip correctly?" )) return pong = UNCONNECTED_PONG() pong.buffer = recvData[0] pong.decode() sInfo = str(pong.serverName)[2:-2].split(";") pCount = sInfo[4] await ctx.send(embed=discord.Embed(color=discord.Color.green(), description=server + " is online with " + pCount + " player(s)."))
def raknet_status( ip, port ): # basically create a mini/shitty raknet client to check the status of BE servers if port is None: port = 19132 ping = UNCONNECTED_PING() ping.pingID = 4201 ping.encode() s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) #s.setblocking(0) # non blocking s.settimeout(2) # 2 seconds time_before = time() try: s.sendto(ping.buffer, (socket.gethostbyname(ip), port)) recv_data = s.recvfrom(2048) except BlockingIOError: return default except socket.gaierror: return default except socket.timeout: return default pong = UNCONNECTED_PONG() pong.buffer = recv_data[0] pong.decode() latency = round((time() - time_before) * 1000, 2) data = pong.serverName.decode('UTF-8').split(';') # str(pong.serverName) => https://wiki.vg/Raknet_Protocol#Unconnected_Ping # b'MCPE;Nether updateeeeeee!;407;1.16.1;1;20;12172066879061040769;Xenon BE 6.0;Survival;1;19132;19133;' s_dict = default.copy() s_dict['online'] = True s_dict['players_online'] = int(data[4]) s_dict['players_max'] = int(data[5]) s_dict['latency'] = latency s_dict['version'] = { 'brand': data[0], # string 'software': None, # string, assumes server is vanilla bc pocketmine + nukkit use query 'protocol': f'raknet {data[2]}', 'method': 'raknet' } s_dict['motd'] = data[1] try: s_dict['map'] = data[7] s_dict['gamemode'] = data[8] except IndexError: pass return s_dict
async def mcstatus(self, ctx): await ctx.trigger_typing() ping = UNCONNECTED_PING() ping.pingID = 4201 ping.encode() s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) s.setblocking(0) try: s.sendto(ping.buffer, ("172.10.17.177", 19132)) await asyncio.sleep(.01) recvData = s.recvfrom(2048) except BlockingIOError: await ctx.send(embed=discord.Embed( color=discord.Color.green(), description= "Xenon BE is either offline or unavailable at the moment. Did you type the ip correctly?" )) return except socket.gaierror: await ctx.send(embed=discord.Embed( color=discord.Color.green(), description= "Xenon BE is either offline or unavailable at the moment. Did you type the ip correctly?" )) return pong = UNCONNECTED_PONG() pong.buffer = recvData[0] pong.decode() sInfo = str(pong.serverName)[2:-2].split(";") pCount = sInfo[4] await ctx.send( embed=discord.Embed(color=discord.Color.green(), description="Xenon BE is online with " + pCount + " player(s).")) await ctx.trigger_typing() status = MinecraftServer.lookup("172.10.17.177:25565") try: status = status.status() await ctx.send(embed=discord.Embed( color=discord.Color.green(), description= "Xenon JE is online with {0} player(s) and a ping of {1} ms.". format(status.players.online, status.latency))) except Exception: await ctx.send(embed=discord.Embed( color=discord.Color.green(), description= "Xenon JE is either offline or unavailable at the moment."))
def vanilla_pe_ping(self, ip, port): ping = UNCONNECTED_PING() ping.pingID = 4201 ping.encode() s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) s.setblocking(0) try: s.sendto(ping.buffer, (socket.gethostbyname(ip), port)) sleep(1.5) recv_data = s.recvfrom(2048) except BlockingIOError: return False, 0 except socket.gaierror: return False, 0 pong = UNCONNECTED_PONG() pong.buffer = recv_data[0] pong.decode() s_info = str(pong.serverName)[2:-2].split(";") p_count = s_info[4] return True, p_count
data = Binary.writeInt(32) print(Binary.readInt(data)) data = Binary.writeLong(32) print(Binary.readLong(data)) data = Binary.writeFloat(32.54) print(Binary.readFloat(data)) data = Binary.writeDouble(32.3232) print(Binary.readDouble(data)) print(type(Binary.writeLong(23))) ping = UNCONNECTED_PING() ping.pingID = 1234 ping.encode() p = EncapsulatedPacket() p.reliability = 2 p.messageIndex = 1 p.buffer = Binary.writeLong(int(900000)) a = 1 data = p.toBinary() print(data) split_length = 5