Skip to content

Commit c8e57ff

Browse files
authored
xiaomi plugin (#101)
1 parent 28fa2f6 commit c8e57ff

File tree

1 file changed

+223
-0
lines changed

1 file changed

+223
-0
lines changed

utils/xiaomi.py

Lines changed: 223 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,223 @@
1+
# XiaomiGeeks Plugin for Moon Userbot
2+
# Provides various Xiaomi device information through @XiaomiGeeksBot
3+
4+
import asyncio
5+
from pyrogram import Client, filters
6+
from pyrogram.errors import UserBlocked
7+
from pyrogram.types import Message
8+
from utils.misc import modules_help, prefix
9+
from utils.scripts import format_exc
10+
11+
12+
async def forward_xiaomi_bot_reply(client: Client, cmd_text: str, message: Message, loading_text: str):
13+
"""Helper function to handle XiaomiGeeksBot interactions"""
14+
try:
15+
status_msg = await message.edit(loading_text)
16+
bot_username = "@XiaomiGeeksBot"
17+
18+
# Send command to bot
19+
await client.send_message(bot_username, cmd_text)
20+
21+
# Wait for response
22+
await asyncio.sleep(3)
23+
24+
# Get and forward response
25+
async for msg in client.get_chat_history(bot_username, limit=1):
26+
await client.forward_messages(
27+
chat_id=message.chat.id,
28+
from_chat_id=bot_username,
29+
message_ids=msg.id
30+
)
31+
await status_msg.delete()
32+
return
33+
34+
await status_msg.edit("<i>No response from bot.</i>")
35+
36+
except UserBlocked:
37+
await message.edit("<i>Please unblock @XiaomiGeeksBot first.</i>")
38+
except Exception as e:
39+
await message.edit(f"<i>Error: {format_exc(e)}</i>")
40+
41+
42+
@Client.on_message(filters.command("firmware", prefix) & filters.me)
43+
async def firmware_cmd(client: Client, message: Message):
44+
"""Get latest firmware for Xiaomi devices"""
45+
if len(message.command) < 2:
46+
await message.edit(f"<b>Usage:</b> <code>{prefix}firmware [codename]</code>")
47+
return
48+
await forward_xiaomi_bot_reply(
49+
client,
50+
f"/firmware {message.command[1]}",
51+
message,
52+
"<i>Fetching firmware info...</i>"
53+
)
54+
55+
56+
@Client.on_message(filters.command("vendor", prefix) & filters.me)
57+
async def vendor_cmd(client: Client, message: Message):
58+
"""Get latest vendor for Xiaomi devices"""
59+
if len(message.command) < 2:
60+
await message.edit(f"<b>Usage:</b> <code>{prefix}vendor [codename]</code>")
61+
return
62+
await forward_xiaomi_bot_reply(
63+
client,
64+
f"/vendor {message.command[1]}",
65+
message,
66+
"<i>Fetching vendor info...</i>"
67+
)
68+
69+
70+
@Client.on_message(filters.command("specs", prefix) & filters.me)
71+
async def specs_cmd(client: Client, message: Message):
72+
"""Get device specifications"""
73+
if len(message.command) < 2:
74+
await message.edit(f"<b>Usage:</b> <code>{prefix}specs [codename]</code>")
75+
return
76+
await forward_xiaomi_bot_reply(
77+
client,
78+
f"/specs {message.command[1]}",
79+
message,
80+
"<i>Fetching device specs...</i>"
81+
)
82+
83+
84+
@Client.on_message(filters.command("fastboot", prefix) & filters.me)
85+
async def fastboot_cmd(client: Client, message: Message):
86+
"""Get fastboot ROM"""
87+
if len(message.command) < 2:
88+
await message.edit(f"<b>Usage:</b> <code>{prefix}fastboot [codename]</code>")
89+
return
90+
await forward_xiaomi_bot_reply(
91+
client,
92+
f"/fastboot {message.command[1]}",
93+
message,
94+
"<i>Fetching fastboot ROM...</i>"
95+
)
96+
97+
98+
@Client.on_message(filters.command("recovery", prefix) & filters.me)
99+
async def recovery_cmd(client: Client, message: Message):
100+
"""Get recovery ROM"""
101+
if len(message.command) < 2:
102+
await message.edit(f"<b>Usage:</b> <code>{prefix}recovery [codename]</code>")
103+
return
104+
await forward_xiaomi_bot_reply(
105+
client,
106+
f"/recovery {message.command[1]}",
107+
message,
108+
"<i>Fetching recovery ROM...</i>"
109+
)
110+
111+
112+
@Client.on_message(filters.command("of", prefix) & filters.me)
113+
async def of_cmd(client: Client, message: Message):
114+
"""Get OrangeFox Recovery"""
115+
if len(message.command) < 2:
116+
await message.edit(f"<b>Usage:</b> <code>{prefix}of [codename]</code>")
117+
return
118+
await forward_xiaomi_bot_reply(
119+
client,
120+
f"/of {message.command[1]}",
121+
message,
122+
"<i>Fetching OrangeFox Recovery...</i>"
123+
)
124+
125+
126+
@Client.on_message(filters.command("latest", prefix) & filters.me)
127+
async def latest_cmd(client: Client, message: Message):
128+
"""Get latest OS versions info"""
129+
if len(message.command) < 2:
130+
await message.edit(f"<b>Usage:</b> <code>{prefix}latest [codename]</code>")
131+
return
132+
await forward_xiaomi_bot_reply(
133+
client,
134+
f"/latest {message.command[1]}",
135+
message,
136+
"<i>Fetching latest OS info...</i>"
137+
)
138+
139+
140+
@Client.on_message(filters.command("archive", prefix) & filters.me)
141+
async def archive_cmd(client: Client, message: Message):
142+
"""Get official ROM archive links"""
143+
if len(message.command) < 2:
144+
await message.edit(f"<b>Usage:</b> <code>{prefix}archive [codename]</code>")
145+
return
146+
await forward_xiaomi_bot_reply(
147+
client,
148+
f"/archive {message.command[1]}",
149+
message,
150+
"<i>Fetching archive links...</i>"
151+
)
152+
153+
154+
@Client.on_message(filters.command("eu", prefix) & filters.me)
155+
async def eu_cmd(client: Client, message: Message):
156+
"""Get Xiaomi.eu ROMs"""
157+
if len(message.command) < 2:
158+
await message.edit(f"<b>Usage:</b> <code>{prefix}eu [codename]</code>")
159+
return
160+
await forward_xiaomi_bot_reply(
161+
client,
162+
f"/eu {message.command[1]}",
163+
message,
164+
"<i>Fetching Xiaomi.eu ROMs...</i>"
165+
)
166+
167+
168+
@Client.on_message(filters.command("twrp", prefix) & filters.me)
169+
async def twrp_cmd(client: Client, message: Message):
170+
"""Get TWRP download link"""
171+
if len(message.command) < 2:
172+
await message.edit(f"<b>Usage:</b> <code>{prefix}twrp [codename]</code>")
173+
return
174+
await forward_xiaomi_bot_reply(
175+
client,
176+
f"/twrp {message.command[1]}",
177+
message,
178+
"<i>Fetching TWRP...</i>"
179+
)
180+
181+
182+
@Client.on_message(filters.command("models", prefix) & filters.me)
183+
async def models_cmd(client: Client, message: Message):
184+
"""Get available device models"""
185+
if len(message.command) < 2:
186+
await message.edit(f"<b>Usage:</b> <code>{prefix}models [codename]</code>")
187+
return
188+
await forward_xiaomi_bot_reply(
189+
client,
190+
f"/models {message.command[1]}",
191+
message,
192+
"<i>Fetching models...</i>"
193+
)
194+
195+
196+
@Client.on_message(filters.command("whatis", prefix) & filters.me)
197+
async def whatis_cmd(client: Client, message: Message):
198+
"""Get device name from codename"""
199+
if len(message.command) < 2:
200+
await message.edit(f"<b>Usage:</b> <code>{prefix}whatis [codename]</code>")
201+
return
202+
await forward_xiaomi_bot_reply(
203+
client,
204+
f"/whatis {message.command[1]}",
205+
message,
206+
"<i>Identifying device...</i>"
207+
)
208+
209+
210+
modules_help["xiaomi"] = {
211+
"archive [codename]": "Get official ROM archive links",
212+
"eu [codename]": "Get Xiaomi.eu ROMs",
213+
"fastboot [codename]": "Get fastboot ROM",
214+
"firmware [codename]": "Get latest firmware for Xiaomi device",
215+
"latest [codename]": "Get latest OS versions info",
216+
"models [codename]": "Get available device models",
217+
"of [codename]": "Get OrangeFox Recovery",
218+
"recovery [codename]": "Get recovery ROM",
219+
"specs [codename]": "Get device specifications",
220+
"twrp [codename]": "Get TWRP download link",
221+
"vendor [codename]": "Get latest vendor for Xiaomi device",
222+
"whatis [codename]": "Get device name from codename"
223+
}

0 commit comments

Comments
 (0)