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