Skip to content

Commit 07aca39

Browse files
committed
[minecraft] add support of Bedrock servers in [p]mc server
1 parent de234c7 commit 07aca39

File tree

2 files changed

+100
-64
lines changed

2 files changed

+100
-64
lines changed

minecraftdata/locales/messages.pot

Lines changed: 56 additions & 53 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
msgid ""
33
msgstr ""
44
"Project-Id-Version: PACKAGE VERSION\n"
5-
"POT-Creation-Date: 2022-09-15 13:32+0400\n"
5+
"POT-Creation-Date: 2022-09-20 18:39+0400\n"
66
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
77
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
88
"Language-Team: LANGUAGE <[email protected]>\n"
@@ -11,176 +11,179 @@ msgstr ""
1111
"Content-Transfer-Encoding: 8bit\n"
1212
"Generated-By: redgettext 3.3\n"
1313

14-
#: minecraftdata\minecraftdata.py:26
15-
msgid "💔 **UNAVAILABLE**"
16-
msgstr ""
17-
18-
#: minecraftdata\minecraftdata.py:27
19-
msgid "💛 **SOME ISSUES**"
20-
msgstr ""
21-
22-
#: minecraftdata\minecraftdata.py:28
23-
msgid "💚 **OK**"
24-
msgstr ""
25-
26-
#: minecraftdata\minecraftdata.py:36
14+
#: minecraftdata\minecraftdata.py:30
2715
#, docstring
2816
msgid "Minecraft-Related data"
2917
msgstr ""
3018

31-
#: minecraftdata\minecraftdata.py:57
19+
#: minecraftdata\minecraftdata.py:51
3220
#, docstring
3321
msgid "Get Minecraft-Related data"
3422
msgstr ""
3523

36-
#: minecraftdata\minecraftdata.py:63
24+
#: minecraftdata\minecraftdata.py:57
3725
#, docstring
3826
msgid "Get minecraft skin by nickname"
3927
msgstr ""
4028

41-
#: minecraftdata\minecraftdata.py:95
29+
#: minecraftdata\minecraftdata.py:89
4230
msgid "Unable to get data from Crafatar: {}"
4331
msgstr ""
4432

45-
#: minecraftdata\minecraftdata.py:106
33+
#: minecraftdata\minecraftdata.py:100
4634
msgid "Provided by Crafatar"
4735
msgstr ""
4836

49-
#: minecraftdata\minecraftdata.py:115
37+
#: minecraftdata\minecraftdata.py:109
5038
#, docstring
5139
msgid "Get Minecraft capes by nickname"
5240
msgstr ""
5341

54-
#: minecraftdata\minecraftdata.py:122
42+
#: minecraftdata\minecraftdata.py:116
5543
msgid "{} doesn't have cape"
5644
msgstr ""
5745

58-
#: minecraftdata\minecraftdata.py:124
46+
#: minecraftdata\minecraftdata.py:118
5947
msgid "Unable to get cape: {}"
6048
msgstr ""
6149

62-
#: minecraftdata\minecraftdata.py:133
50+
#: minecraftdata\minecraftdata.py:127
6351
#, docstring
6452
msgid "Get OptiFine cape by nickname"
6553
msgstr ""
6654

67-
#: minecraftdata\minecraftdata.py:140
55+
#: minecraftdata\minecraftdata.py:134
6856
msgid "{} doesn't have OptiFine cape"
6957
msgstr ""
7058

71-
#: minecraftdata\minecraftdata.py:144
59+
#: minecraftdata\minecraftdata.py:138
7260
msgid "Unable to get {player}'s OptiFine cape: {message}"
7361
msgstr ""
7462

75-
#: minecraftdata\minecraftdata.py:157
63+
#: minecraftdata\minecraftdata.py:151
7664
#, docstring
7765
msgid "Get LabyMod cape by nickname"
7866
msgstr ""
7967

80-
#: minecraftdata\minecraftdata.py:166
68+
#: minecraftdata\minecraftdata.py:160
8169
msgid "{} doesn't have LabyMod cape"
8270
msgstr ""
8371

84-
#: minecraftdata\minecraftdata.py:170
72+
#: minecraftdata\minecraftdata.py:164
8573
msgid "Unable to get data: {message} ({status})"
8674
msgstr ""
8775

88-
#: minecraftdata\minecraftdata.py:183
76+
#: minecraftdata\minecraftdata.py:177
8977
#, docstring
9078
msgid "Get MinecraftCapes.co.uk cape by nickname"
9179
msgstr ""
9280

93-
#: minecraftdata\minecraftdata.py:192
81+
#: minecraftdata\minecraftdata.py:186
9482
msgid "{} doesn't have MinecraftCapes cape"
9583
msgstr ""
9684

97-
#: minecraftdata\minecraftdata.py:197
85+
#: minecraftdata\minecraftdata.py:191
9886
msgid "Unable to get {player}'s MinecraftCapes cape: {message}"
9987
msgstr ""
10088

101-
#: minecraftdata\minecraftdata.py:212
89+
#: minecraftdata\minecraftdata.py:206
10290
#, docstring
10391
msgid "Get 5zig cape by nickname"
10492
msgstr ""
10593

106-
#: minecraftdata\minecraftdata.py:222 minecraftdata\minecraftdata.py:254
94+
#: minecraftdata\minecraftdata.py:216 minecraftdata\minecraftdata.py:248
10795
msgid "{} doesn't have 5zig cape"
10896
msgstr ""
10997

110-
#: minecraftdata\minecraftdata.py:226 minecraftdata\minecraftdata.py:258
98+
#: minecraftdata\minecraftdata.py:220 minecraftdata\minecraftdata.py:252
11199
msgid "Unable to get {player}'s 5zig cape: {message}"
112100
msgstr ""
113101

114-
#: minecraftdata\minecraftdata.py:239
102+
#: minecraftdata\minecraftdata.py:233
115103
#, docstring
116104
msgid "Get 5zig animated cape by nickname"
117105
msgstr ""
118106

119-
#: minecraftdata\minecraftdata.py:248
107+
#: minecraftdata\minecraftdata.py:242
120108
msgid "{} doesn't have animated 5zig cape"
121109
msgstr ""
122110

123-
#: minecraftdata\minecraftdata.py:277
111+
#: minecraftdata\minecraftdata.py:271
124112
#, docstring
125-
msgid "Get info about server"
113+
msgid "Get info about Minecraft Java Edition server"
126114
msgstr ""
127115

128-
#: minecraftdata\minecraftdata.py:283
116+
#: minecraftdata\minecraftdata.py:277 minecraftdata\minecraftdata.py:361
129117
msgid "Unable to resolve IP: {}"
130118
msgstr ""
131119

132-
#: minecraftdata\minecraftdata.py:289
120+
#: minecraftdata\minecraftdata.py:283 minecraftdata\minecraftdata.py:367
133121
msgid "Unable to get server's status: {}"
134122
msgstr ""
135123

136-
#: minecraftdata\minecraftdata.py:292
124+
#: minecraftdata\minecraftdata.py:286 minecraftdata\minecraftdata.py:370
137125
msgid "Unable to get server's status: Timed out"
138126
msgstr ""
139127

140-
#: minecraftdata\minecraftdata.py:310
128+
#: minecraftdata\minecraftdata.py:304 minecraftdata\minecraftdata.py:377
141129
msgid "Latency"
142130
msgstr ""
143131

144-
#: minecraftdata\minecraftdata.py:312
132+
#: minecraftdata\minecraftdata.py:306 minecraftdata\minecraftdata.py:378
145133
msgid "Players"
146134
msgstr ""
147135

148-
#: minecraftdata\minecraftdata.py:330
136+
#: minecraftdata\minecraftdata.py:324 minecraftdata\minecraftdata.py:380
149137
msgid "Version"
150138
msgstr ""
151139

152-
#: minecraftdata\minecraftdata.py:331
153-
msgid ""
154-
"{}\n"
155-
"Protocol: {}"
140+
#: minecraftdata\minecraftdata.py:325
141+
msgid "Protocol: {}"
156142
msgstr ""
157143

158-
#: minecraftdata\minecraftdata.py:340
144+
#: minecraftdata\minecraftdata.py:336
159145
msgid "Unable to get query data: {}"
160146
msgstr ""
161147

162-
#: minecraftdata\minecraftdata.py:344
148+
#: minecraftdata\minecraftdata.py:340
163149
msgid "Unable to get query data: Timed out."
164150
msgstr ""
165151

166-
#: minecraftdata\minecraftdata.py:347
152+
#: minecraftdata\minecraftdata.py:343
167153
msgid "World"
168154
msgstr ""
169155

170-
#: minecraftdata\minecraftdata.py:349
156+
#: minecraftdata\minecraftdata.py:345
171157
msgid "Software"
172158
msgstr ""
173159

174-
#: minecraftdata\minecraftdata.py:350
160+
#: minecraftdata\minecraftdata.py:346
175161
msgid ""
176162
"{}\n"
177163
"Version: {}"
178164
msgstr ""
179165

180-
#: minecraftdata\minecraftdata.py:352
166+
#: minecraftdata\minecraftdata.py:348
181167
msgid "Plugins: {}"
182168
msgstr ""
183169

170+
#: minecraftdata\minecraftdata.py:355
171+
#, docstring
172+
msgid "Get info about Minecraft Bedrock server"
173+
msgstr ""
174+
175+
#: minecraftdata\minecraftdata.py:381
176+
msgid "Brand: {}"
177+
msgstr ""
178+
179+
#: minecraftdata\minecraftdata.py:385
180+
msgid "Map"
181+
msgstr ""
182+
183+
#: minecraftdata\minecraftdata.py:386
184+
msgid "Gamemode"
185+
msgstr ""
186+
184187
#: minecraftdata\minecraftplayer.py:35
185188
msgid "Unable to get data from Minecraft API: {}"
186189
msgstr ""

minecraftdata/minecraftdata.py

Lines changed: 44 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -22,20 +22,14 @@
2222
T_ = Translator("MinecraftData", __file__)
2323
_ = lambda s: s
2424

25-
SERVICE_STATUS = {
26-
"red": _("💔 **UNAVAILABLE**"),
27-
"yellow": _("💛 **SOME ISSUES**"),
28-
"green": _("💚 **OK**"),
29-
}
30-
3125
_ = T_
3226

3327

3428
@cog_i18n(_)
3529
class MinecraftData(commands.Cog):
3630
"""Minecraft-Related data"""
3731

38-
__version__ = "2.1.0"
32+
__version__ = "2.2.0"
3933

4034
# noinspection PyMissingConstructor
4135
def __init__(self, bot):
@@ -60,7 +54,7 @@ async def minecraft(self, ctx):
6054
@minecraft.command(usage="<player> [overlay layer=True]")
6155
@commands.bot_has_permissions(embed_links=True)
6256
async def skin(self, ctx, player: MCPlayer, overlay: bool = True):
63-
"""Get minecraft skin by nickname"""
57+
"""Get minecraft Java Edition skin by nickname"""
6458
uuid = player.uuid
6559
stripname = player.name.strip("_")
6660
files = []
@@ -271,10 +265,10 @@ async def fivezig_animated(self, ctx, player: MCPlayer):
271265
async def server(self, ctx):
272266
pass
273267

274-
@server.command(usage="[query] <server IP>[:port]")
268+
@server.command(usage="[query=False] <server IP>[:port]")
275269
@commands.cooldown(1, 30, commands.BucketType.user)
276270
async def java(self, ctx, query_data: Optional[bool], server_ip: str):
277-
"""Get info about server"""
271+
"""Get info about Minecraft Java Edition server"""
278272
try:
279273
server: JavaServer = await self.bot.loop.run_in_executor(
280274
None, JavaServer.lookup, server_ip
@@ -328,7 +322,9 @@ async def java(self, ctx, query_data: Optional[bool], server_ip: str):
328322
)
329323
embed.add_field(
330324
name=_("Version"),
331-
value=_("{}\nProtocol: {}").format(status.version.name, status.version.protocol),
325+
value=("{}" + "\n" + _("Protocol: {}")).format(
326+
status.version.name, status.version.protocol
327+
),
332328
)
333329
msg = await ctx.send(file=icon, embed=embed)
334330
if icon_file:
@@ -353,6 +349,43 @@ async def java(self, ctx, query_data: Optional[bool], server_ip: str):
353349
)
354350
await msg.edit(embed=embed)
355351

352+
@server.command(usage="<server IP>[:port]")
353+
@commands.cooldown(1, 30, commands.BucketType.user)
354+
async def bedrock(self, ctx, server_ip: str):
355+
"""Get info about Minecraft Bedrock server"""
356+
try:
357+
server: BedrockServer = await self.bot.loop.run_in_executor(
358+
None, BedrockServer.lookup, server_ip
359+
)
360+
except Exception as e:
361+
await ctx.send(chat.error(_("Unable to resolve IP: {}").format(e)))
362+
return
363+
async with ctx.channel.typing():
364+
try:
365+
status = await server.async_status()
366+
except OSError as e:
367+
await ctx.send(chat.error(_("Unable to get server's status: {}").format(e)))
368+
return
369+
except AsyncTimeoutError:
370+
await ctx.send(chat.error(_("Unable to get server's status: Timed out")))
371+
return
372+
embed = discord.Embed(
373+
title=f"{server.address.host}:{server.address.port}",
374+
description=chat.box(await self.clear_mcformatting(status.motd)),
375+
color=await ctx.embed_color(),
376+
)
377+
embed.add_field(name=_("Latency"), value=f"{status.latency:.2f} ms")
378+
embed.add_field(name=_("Players"), value=f"{status.players_online}/{status.players_max}"),
379+
embed.add_field(
380+
name=_("Version"),
381+
value=("{}" + "\n" + _("Protocol: {}" + "\n" + _("Brand: {}"))).format(
382+
status.version.version, status.version.protocol, status.version.brand
383+
),
384+
)
385+
embed.add_field(name=_("Map"), value=status.map)
386+
embed.add_field(name=_("Gamemode"), value=status.gamemode)
387+
await ctx.send(embed=embed)
388+
356389
# @minecraft.command(aliases=["nicknames", "nickhistory", "names"])
357390
# async def nicks(self, ctx, current_nick: MCPlayer):
358391
# """Check history of player's nicks"""

0 commit comments

Comments
 (0)