dshellInterpreter 1.2.0.8__tar.gz → 1.2.0.10__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {dshellinterpreter-1.2.0.8 → dshellinterpreter-1.2.0.10}/Dshell/DISCORD_COMMANDS/dshell_channel.py +7 -29
- {dshellinterpreter-1.2.0.8 → dshellinterpreter-1.2.0.10}/Dshell/DISCORD_COMMANDS/dshell_file.py +1 -1
- {dshellinterpreter-1.2.0.8 → dshellinterpreter-1.2.0.10}/Dshell/DISCORD_COMMANDS/dshell_message.py +32 -68
- {dshellinterpreter-1.2.0.8 → dshellinterpreter-1.2.0.10}/Dshell/DISCORD_COMMANDS/utils/utils_message.py +31 -4
- {dshellinterpreter-1.2.0.8 → dshellinterpreter-1.2.0.10}/Dshell/DshellInterpreteur/dshell_interpreter.py +8 -0
- {dshellinterpreter-1.2.0.8 → dshellinterpreter-1.2.0.10}/Dshell/DshellParser/ast_nodes.py +20 -0
- {dshellinterpreter-1.2.0.8 → dshellinterpreter-1.2.0.10}/Dshell/DshellTokenizer/dshell_keywords.py +1 -1
- {dshellinterpreter-1.2.0.8/dshellInterpreter.egg-info → dshellinterpreter-1.2.0.10}/PKG-INFO +1 -1
- {dshellinterpreter-1.2.0.8 → dshellinterpreter-1.2.0.10/dshellInterpreter.egg-info}/PKG-INFO +1 -1
- {dshellinterpreter-1.2.0.8 → dshellinterpreter-1.2.0.10}/setup.py +1 -1
- {dshellinterpreter-1.2.0.8 → dshellinterpreter-1.2.0.10}/Dshell/DISCORD_COMMANDS/__init__.py +0 -0
- {dshellinterpreter-1.2.0.8 → dshellinterpreter-1.2.0.10}/Dshell/DISCORD_COMMANDS/dshell_embed.py +0 -0
- {dshellinterpreter-1.2.0.8 → dshellinterpreter-1.2.0.10}/Dshell/DISCORD_COMMANDS/dshell_interaction.py +0 -0
- {dshellinterpreter-1.2.0.8 → dshellinterpreter-1.2.0.10}/Dshell/DISCORD_COMMANDS/dshell_member.py +0 -0
- {dshellinterpreter-1.2.0.8 → dshellinterpreter-1.2.0.10}/Dshell/DISCORD_COMMANDS/dshell_pastbin.py +0 -0
- {dshellinterpreter-1.2.0.8 → dshellinterpreter-1.2.0.10}/Dshell/DISCORD_COMMANDS/dshell_role.py +0 -0
- {dshellinterpreter-1.2.0.8 → dshellinterpreter-1.2.0.10}/Dshell/DISCORD_COMMANDS/dshell_ui.py +0 -0
- {dshellinterpreter-1.2.0.8 → dshellinterpreter-1.2.0.10}/Dshell/DISCORD_COMMANDS/utils/__init__.py +0 -0
- {dshellinterpreter-1.2.0.8 → dshellinterpreter-1.2.0.10}/Dshell/DISCORD_COMMANDS/utils/utils_embed.py +0 -0
- {dshellinterpreter-1.2.0.8 → dshellinterpreter-1.2.0.10}/Dshell/DISCORD_COMMANDS/utils/utils_file.py +0 -0
- {dshellinterpreter-1.2.0.8 → dshellinterpreter-1.2.0.10}/Dshell/DISCORD_COMMANDS/utils/utils_global.py +0 -0
- {dshellinterpreter-1.2.0.8 → dshellinterpreter-1.2.0.10}/Dshell/DISCORD_COMMANDS/utils/utils_list.py +0 -0
- {dshellinterpreter-1.2.0.8 → dshellinterpreter-1.2.0.10}/Dshell/DISCORD_COMMANDS/utils/utils_member.py +0 -0
- {dshellinterpreter-1.2.0.8 → dshellinterpreter-1.2.0.10}/Dshell/DISCORD_COMMANDS/utils/utils_numbers.py +0 -0
- {dshellinterpreter-1.2.0.8 → dshellinterpreter-1.2.0.10}/Dshell/DISCORD_COMMANDS/utils/utils_permissions.py +0 -0
- {dshellinterpreter-1.2.0.8 → dshellinterpreter-1.2.0.10}/Dshell/DISCORD_COMMANDS/utils/utils_string.py +0 -0
- {dshellinterpreter-1.2.0.8 → dshellinterpreter-1.2.0.10}/Dshell/DISCORD_COMMANDS/utils/utils_thread.py +0 -0
- {dshellinterpreter-1.2.0.8 → dshellinterpreter-1.2.0.10}/Dshell/DISCORD_COMMANDS/utils/utils_type_validation.py +0 -0
- {dshellinterpreter-1.2.0.8 → dshellinterpreter-1.2.0.10}/Dshell/DshellInterpreteur/__init__.py +0 -0
- {dshellinterpreter-1.2.0.8 → dshellinterpreter-1.2.0.10}/Dshell/DshellInterpreteur/cached_messages.py +0 -0
- {dshellinterpreter-1.2.0.8 → dshellinterpreter-1.2.0.10}/Dshell/DshellInterpreteur/dshell_arguments.py +0 -0
- {dshellinterpreter-1.2.0.8 → dshellinterpreter-1.2.0.10}/Dshell/DshellInterpreteur/dshell_global_variables.py +0 -0
- {dshellinterpreter-1.2.0.8 → dshellinterpreter-1.2.0.10}/Dshell/DshellInterpreteur/dshell_scope.py +0 -0
- {dshellinterpreter-1.2.0.8 → dshellinterpreter-1.2.0.10}/Dshell/DshellInterpreteur/errors.py +0 -0
- {dshellinterpreter-1.2.0.8 → dshellinterpreter-1.2.0.10}/Dshell/DshellInterpreteur/utils_interpreter.py +0 -0
- {dshellinterpreter-1.2.0.8 → dshellinterpreter-1.2.0.10}/Dshell/DshellParser/__init__.py +0 -0
- {dshellinterpreter-1.2.0.8 → dshellinterpreter-1.2.0.10}/Dshell/DshellParser/dshell_parser.py +0 -0
- {dshellinterpreter-1.2.0.8 → dshellinterpreter-1.2.0.10}/Dshell/DshellParser/errors.py +0 -0
- {dshellinterpreter-1.2.0.8 → dshellinterpreter-1.2.0.10}/Dshell/DshellPreProcess/__init__.py +0 -0
- {dshellinterpreter-1.2.0.8 → dshellinterpreter-1.2.0.10}/Dshell/DshellPreProcess/dshell_preprocess.py +0 -0
- {dshellinterpreter-1.2.0.8 → dshellinterpreter-1.2.0.10}/Dshell/DshellTokenizer/__init__.py +0 -0
- {dshellinterpreter-1.2.0.8 → dshellinterpreter-1.2.0.10}/Dshell/DshellTokenizer/dshell_token_type.py +0 -0
- {dshellinterpreter-1.2.0.8 → dshellinterpreter-1.2.0.10}/Dshell/DshellTokenizer/dshell_tokenizer.py +0 -0
- {dshellinterpreter-1.2.0.8 → dshellinterpreter-1.2.0.10}/Dshell/__init__.py +0 -0
- {dshellinterpreter-1.2.0.8 → dshellinterpreter-1.2.0.10}/Dshell/full_import.py +0 -0
- {dshellinterpreter-1.2.0.8 → dshellinterpreter-1.2.0.10}/Dshell/regex_test.py +0 -0
- {dshellinterpreter-1.2.0.8 → dshellinterpreter-1.2.0.10}/LICENSE +0 -0
- {dshellinterpreter-1.2.0.8 → dshellinterpreter-1.2.0.10}/README.md +0 -0
- {dshellinterpreter-1.2.0.8 → dshellinterpreter-1.2.0.10}/dshellInterpreter.egg-info/SOURCES.txt +0 -0
- {dshellinterpreter-1.2.0.8 → dshellinterpreter-1.2.0.10}/dshellInterpreter.egg-info/dependency_links.txt +0 -0
- {dshellinterpreter-1.2.0.8 → dshellinterpreter-1.2.0.10}/dshellInterpreter.egg-info/requires.txt +0 -0
- {dshellinterpreter-1.2.0.8 → dshellinterpreter-1.2.0.10}/dshellInterpreter.egg-info/top_level.txt +0 -0
- {dshellinterpreter-1.2.0.8 → dshellinterpreter-1.2.0.10}/setup.cfg +0 -0
{dshellinterpreter-1.2.0.8 → dshellinterpreter-1.2.0.10}/Dshell/DISCORD_COMMANDS/dshell_channel.py
RENAMED
|
@@ -353,10 +353,7 @@ async def dshell_create_thread_message(ctx: Message,
|
|
|
353
353
|
|
|
354
354
|
_CMD = "ct"
|
|
355
355
|
|
|
356
|
-
if message is None
|
|
357
|
-
message = ctx.id
|
|
358
|
-
|
|
359
|
-
message = utils_get_message(ctx, message)
|
|
356
|
+
message = ctx if message is None else await utils_get_message(ctx, message)
|
|
360
357
|
|
|
361
358
|
_validate_required_string(name, "Name", _CMD)
|
|
362
359
|
|
|
@@ -372,12 +369,7 @@ async def dshell_create_thread_message(ctx: Message,
|
|
|
372
369
|
if isinstance(slowmode, IntNode) and slowmode < 0:
|
|
373
370
|
raise Exception("Slowmode delay must be a positive integer !")
|
|
374
371
|
|
|
375
|
-
|
|
376
|
-
m = await message.fetch()
|
|
377
|
-
else:
|
|
378
|
-
m = message
|
|
379
|
-
|
|
380
|
-
thread = await m.create_thread(name=name,
|
|
372
|
+
thread = await message.create_thread(name=name,
|
|
381
373
|
auto_archive_duration=archive,
|
|
382
374
|
slowmode_delay=slowmode)
|
|
383
375
|
|
|
@@ -430,14 +422,7 @@ async def dshell_get_thread(ctx: Message, message: Optional[Union[IntNode, StrNo
|
|
|
430
422
|
|
|
431
423
|
_CMD = "gt"
|
|
432
424
|
|
|
433
|
-
if message is None
|
|
434
|
-
message = ctx.id
|
|
435
|
-
|
|
436
|
-
target_message = utils_get_message(ctx, message)
|
|
437
|
-
if isinstance(target_message, PartialMessage):
|
|
438
|
-
message = await target_message.fetch()
|
|
439
|
-
else:
|
|
440
|
-
message = target_message
|
|
425
|
+
message = ctx if message is None else await utils_get_message(ctx, message)
|
|
441
426
|
|
|
442
427
|
# Return None if message doesn't have thread attribute (not raising error for this case)
|
|
443
428
|
if not hasattr(message, 'thread'):
|
|
@@ -460,24 +445,17 @@ async def dshell_delete_thread(ctx: Message,
|
|
|
460
445
|
|
|
461
446
|
_CMD = "dt"
|
|
462
447
|
|
|
463
|
-
if thread is None
|
|
464
|
-
thread = ctx.id
|
|
465
|
-
|
|
466
|
-
target_message = utils_get_message(ctx, thread)
|
|
467
|
-
if isinstance(target_message, PartialMessage):
|
|
468
|
-
thread = await target_message.fetch()
|
|
469
|
-
else:
|
|
470
|
-
thread = target_message
|
|
448
|
+
target_message = ctx if thread is None else await utils_get_message(ctx, thread)
|
|
471
449
|
|
|
472
450
|
_validate_has_attribute(thread, 'thread', f"[{_CMD}] The specified message does not have a thread !")
|
|
473
451
|
_validate_optional_string(reason, "reason", _CMD)
|
|
474
452
|
|
|
475
|
-
if
|
|
453
|
+
if target_message.thread is None:
|
|
476
454
|
raise Exception("The specified message does not have a thread !")
|
|
477
455
|
|
|
478
|
-
await
|
|
456
|
+
await target_message.thread.delete(reason=reason)
|
|
479
457
|
|
|
480
|
-
return IntNode(
|
|
458
|
+
return IntNode(target_message.thread.id)
|
|
481
459
|
|
|
482
460
|
async def dshell_create_category(ctx: Message,
|
|
483
461
|
name: StrNode,
|
{dshellinterpreter-1.2.0.8 → dshellinterpreter-1.2.0.10}/Dshell/DISCORD_COMMANDS/dshell_file.py
RENAMED
|
@@ -23,7 +23,7 @@ async def dshell_get_message_files(ctx: Message, message: Union[StrNode, IntNode
|
|
|
23
23
|
:return:
|
|
24
24
|
"""
|
|
25
25
|
|
|
26
|
-
target_message = ctx if message is None else utils_get_message(ctx, message)
|
|
26
|
+
target_message = ctx if message is None else await utils_get_message(ctx, message)
|
|
27
27
|
|
|
28
28
|
attachments_list: ListNode = ListNode([], bypass_limit_elt=True)
|
|
29
29
|
|
{dshellinterpreter-1.2.0.8 → dshellinterpreter-1.2.0.10}/Dshell/DISCORD_COMMANDS/dshell_message.py
RENAMED
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
from pycordViews import EasyModifiedViews
|
|
2
|
+
|
|
1
3
|
from Dshell.full_import import (Message,
|
|
2
4
|
PartialMessage,
|
|
3
5
|
File)
|
|
@@ -124,7 +126,7 @@ async def dshell_respond_message(ctx: Message,
|
|
|
124
126
|
_validate_required_bool(users_mentions, "Users mentions", _CMD)
|
|
125
127
|
_validate_required_bool(reply_mention, "Reply mention", _CMD)
|
|
126
128
|
|
|
127
|
-
respond_message = ctx if message is None else utils_get_message(ctx, message) # builds a reference to the message (even if it doesn't exist)
|
|
129
|
+
respond_message = ctx if message is None else await utils_get_message(ctx, message) # builds a reference to the message (even if it doesn't exist)
|
|
128
130
|
autorised_mentions = utils_autorised_mentions(global_mentions, everyone_mention, roles_mentions, users_mentions, reply_mention)
|
|
129
131
|
mention_author = True if reply_mention else False
|
|
130
132
|
|
|
@@ -157,7 +159,7 @@ async def dshell_delete_message(ctx: Message,
|
|
|
157
159
|
"""
|
|
158
160
|
_CMD = "dm"
|
|
159
161
|
|
|
160
|
-
delete_message = ctx if message is None else utils_get_message(ctx, message)
|
|
162
|
+
delete_message = ctx if message is None else await utils_get_message(ctx, message)
|
|
161
163
|
|
|
162
164
|
_validate_optional_int(delay, "delay", _CMD)
|
|
163
165
|
_validate_optional_string(reason, "reason", _CMD)
|
|
@@ -198,26 +200,33 @@ async def dshell_purge_message(ctx: Message,
|
|
|
198
200
|
|
|
199
201
|
async def dshell_edit_message(ctx: Message,
|
|
200
202
|
message,
|
|
201
|
-
|
|
203
|
+
content: Optional[StrNode]=None,
|
|
202
204
|
embeds: Optional[EmbedNode]=None,
|
|
203
|
-
view=None,
|
|
204
|
-
files: Optional[FileNode]=None
|
|
205
|
+
view: Optional[EasyModifiedViews]=None,
|
|
206
|
+
files: Optional[FileNode]=None,
|
|
207
|
+
keep: BoolNode = BoolNode(1)) -> IntNode:
|
|
205
208
|
"""
|
|
206
209
|
Edits a message
|
|
207
210
|
"""
|
|
208
211
|
_CMD = "em"
|
|
209
212
|
|
|
210
|
-
edit_message = utils_get_message(ctx, message)
|
|
213
|
+
edit_message = await utils_get_message(ctx, message)
|
|
214
|
+
|
|
211
215
|
|
|
212
216
|
_validate_optional_embed(embeds, "embeds", _CMD)
|
|
213
217
|
_validate_optional_view(view, "view", _CMD)
|
|
214
|
-
_validate_optional_string(
|
|
218
|
+
_validate_optional_string(content, "content", _CMD)
|
|
219
|
+
_validate_required_bool(keep, "keep", _CMD)
|
|
215
220
|
|
|
216
221
|
final_files: Optional[list[File]] = utils_check_files_arguments(_CMD, files)
|
|
217
222
|
|
|
218
223
|
embeds = utils_check_embeds_arguments(_CMD, embeds)
|
|
219
224
|
|
|
220
|
-
await edit_message.edit(content=
|
|
225
|
+
await edit_message.edit(content=content,
|
|
226
|
+
embeds=embeds,
|
|
227
|
+
view=view,
|
|
228
|
+
files=final_files,
|
|
229
|
+
attachments=edit_message.attachments if keep else [])
|
|
221
230
|
|
|
222
231
|
return IntNode(edit_message.id)
|
|
223
232
|
|
|
@@ -226,7 +235,7 @@ async def dshell_add_reactions(ctx: Message, reactions: Union[StrNode, ListNode]
|
|
|
226
235
|
Adds reactions to a message
|
|
227
236
|
"""
|
|
228
237
|
_CMD = "ar"
|
|
229
|
-
message = ctx if message is None else utils_get_message(ctx, message)
|
|
238
|
+
message = ctx if message is None else await utils_get_message(ctx, message)
|
|
230
239
|
|
|
231
240
|
if isinstance(reactions, StrNode):
|
|
232
241
|
reactions = (reactions,)
|
|
@@ -243,7 +252,7 @@ async def dshell_remove_reactions(ctx: Message, reactions: Union[ListNode, StrNo
|
|
|
243
252
|
Removes reactions from a message
|
|
244
253
|
"""
|
|
245
254
|
_CMD = "rr"
|
|
246
|
-
message = ctx if message is None else utils_get_message(ctx, message)
|
|
255
|
+
message = ctx if message is None else await utils_get_message(ctx, message)
|
|
247
256
|
|
|
248
257
|
if isinstance(reactions, StrNode):
|
|
249
258
|
reactions = [reactions]
|
|
@@ -258,10 +267,7 @@ async def dshell_clear_message_reactions(ctx: Message, message: Optional[Union[I
|
|
|
258
267
|
"""
|
|
259
268
|
Clear all reaction on the target message
|
|
260
269
|
"""
|
|
261
|
-
message = ctx if message is None else utils_get_message(ctx, message)
|
|
262
|
-
|
|
263
|
-
if message is None:
|
|
264
|
-
raise Exception(f'Message not found !')
|
|
270
|
+
message = ctx if message is None else await utils_get_message(ctx, message)
|
|
265
271
|
|
|
266
272
|
await message.clear_reactions()
|
|
267
273
|
|
|
@@ -275,7 +281,7 @@ async def dshell_clear_one_reactions(ctx: Message, message: Union[IntNode, StrNo
|
|
|
275
281
|
if not isinstance(emoji, StrNode):
|
|
276
282
|
raise Exception(f'Emoji must be StrNode, not {type(emoji)}')
|
|
277
283
|
|
|
278
|
-
target_message = ctx if message is None else utils_get_message(ctx, message)
|
|
284
|
+
target_message = ctx if message is None else await utils_get_message(ctx, message)
|
|
279
285
|
|
|
280
286
|
await target_message.clear_reaction(emoji)
|
|
281
287
|
|
|
@@ -286,7 +292,7 @@ async def dshell_pin_message(ctx: Message, message: Union[IntNode, StrNode]=None
|
|
|
286
292
|
Pin a message
|
|
287
293
|
"""
|
|
288
294
|
|
|
289
|
-
target_message = ctx if message is None else utils_get_message(ctx, message)
|
|
295
|
+
target_message = ctx if message is None else await utils_get_message(ctx, message)
|
|
290
296
|
|
|
291
297
|
await target_message.pin()
|
|
292
298
|
|
|
@@ -299,7 +305,7 @@ async def dshell_unpin_message(ctx: Message, message: Optional[Union[IntNode, St
|
|
|
299
305
|
|
|
300
306
|
_CMD = "upinm"
|
|
301
307
|
|
|
302
|
-
target_message = ctx if message is None else utils_get_message(ctx, message)
|
|
308
|
+
target_message = ctx if message is None else await utils_get_message(ctx, message)
|
|
303
309
|
|
|
304
310
|
_validate_optional_string(reason, "Reason", _CMD)
|
|
305
311
|
|
|
@@ -341,17 +347,9 @@ async def dshell_get_content_message(ctx: Message, message: Optional[Union[IntNo
|
|
|
341
347
|
Get the content of a message
|
|
342
348
|
"""
|
|
343
349
|
|
|
344
|
-
target_message = ctx if message is None else utils_get_message(ctx, message)
|
|
345
|
-
|
|
346
|
-
if isinstance(target_message, PartialMessage):
|
|
347
|
-
try:
|
|
348
|
-
fetch_target_message = await target_message.fetch()
|
|
349
|
-
except:
|
|
350
|
-
raise Exception(f'Message not found !')
|
|
351
|
-
else:
|
|
352
|
-
fetch_target_message = target_message
|
|
350
|
+
target_message = ctx if message is None else await utils_get_message(ctx, message)
|
|
353
351
|
|
|
354
|
-
return StrNode(
|
|
352
|
+
return StrNode(target_message.content)
|
|
355
353
|
|
|
356
354
|
|
|
357
355
|
async def dshell_get_author_id_message(ctx: Message, message: Optional[Union[IntNode, StrNode]] = None):
|
|
@@ -363,15 +361,7 @@ async def dshell_get_author_id_message(ctx: Message, message: Optional[Union[Int
|
|
|
363
361
|
"""
|
|
364
362
|
_CMD = "gma"
|
|
365
363
|
|
|
366
|
-
target_message = ctx
|
|
367
|
-
if message is not None:
|
|
368
|
-
target_message = utils_get_message(ctx, message)
|
|
369
|
-
|
|
370
|
-
if isinstance(target_message, PartialMessage):
|
|
371
|
-
try:
|
|
372
|
-
target_message = await target_message.fetch()
|
|
373
|
-
except:
|
|
374
|
-
raise Exception(f"[message_author] Author ID message to get is not found !")
|
|
364
|
+
target_message = ctx if message is None else await utils_get_message(ctx, message)
|
|
375
365
|
|
|
376
366
|
return IntNode(target_message.author.id)
|
|
377
367
|
|
|
@@ -383,7 +373,7 @@ async def dshell_get_message_link(ctx: Message, message: Union[IntNode, StrNode]
|
|
|
383
373
|
:return:
|
|
384
374
|
"""
|
|
385
375
|
|
|
386
|
-
target_message = utils_get_message(ctx, message)
|
|
376
|
+
target_message = await utils_get_message(ctx, message)
|
|
387
377
|
|
|
388
378
|
return StrNode(target_message.jump_url)
|
|
389
379
|
|
|
@@ -396,19 +386,11 @@ async def dshell_get_message_category_id(ctx: Message, message: Optional[Union[I
|
|
|
396
386
|
"""
|
|
397
387
|
_CMD = "gmc"
|
|
398
388
|
|
|
399
|
-
target_message = ctx
|
|
400
|
-
if message is not None:
|
|
401
|
-
target_message = utils_get_message(ctx, message)
|
|
402
|
-
|
|
403
|
-
if isinstance(target_message, PartialMessage):
|
|
404
|
-
try:
|
|
405
|
-
target_message = await target_message.fetch()
|
|
406
|
-
except:
|
|
407
|
-
raise Exception(f"[category_message] Message ID to get is not found !")
|
|
389
|
+
target_message = ctx if message is None else await utils_get_message(ctx, message)
|
|
408
390
|
|
|
409
391
|
return IntNode(target_message.channel.category.id) if target_message.channel.category is not None else IntNode(0)
|
|
410
392
|
|
|
411
|
-
async def dshell_get_message_attachments(ctx: Message, message: Optional[Union[
|
|
393
|
+
async def dshell_get_message_attachments(ctx: Message, message: Optional[Union[IntNode, StrNode]] = None):
|
|
412
394
|
"""
|
|
413
395
|
Return the attachments of a message given its ID
|
|
414
396
|
:param ctx:
|
|
@@ -419,15 +401,7 @@ async def dshell_get_message_attachments(ctx: Message, message: Optional[Union[I
|
|
|
419
401
|
|
|
420
402
|
_validate_optional_int(message, "Message parameter", _CMD)
|
|
421
403
|
|
|
422
|
-
target_message = ctx
|
|
423
|
-
if message is not None:
|
|
424
|
-
target_message = utils_get_message(ctx, message)
|
|
425
|
-
|
|
426
|
-
if isinstance(target_message, PartialMessage):
|
|
427
|
-
try:
|
|
428
|
-
target_message = await target_message.fetch()
|
|
429
|
-
except:
|
|
430
|
-
raise Exception(f"[attachments_message] Message ID to get is not found !")
|
|
404
|
+
target_message = ctx if message is None else await utils_get_message(ctx, message)
|
|
431
405
|
|
|
432
406
|
attachments = ListNode([])
|
|
433
407
|
|
|
@@ -447,7 +421,6 @@ async def dshell_get_channel_pined_messages(ctx: Message, channel: Optional[IntN
|
|
|
447
421
|
|
|
448
422
|
pinned_messages = await channel_to_check.pins()
|
|
449
423
|
|
|
450
|
-
|
|
451
424
|
messages_list = ListNode([])
|
|
452
425
|
|
|
453
426
|
cached_messages = dshell_cached_messages.get()
|
|
@@ -468,15 +441,7 @@ async def dshell_is_message_system(ctx: Message, message: Optional[Union[IntNode
|
|
|
468
441
|
|
|
469
442
|
_validate_optional_int(message, "Message parameter", _CMD)
|
|
470
443
|
|
|
471
|
-
target_message = ctx
|
|
472
|
-
if message is not None:
|
|
473
|
-
target_message = utils_get_message(ctx, message)
|
|
474
|
-
|
|
475
|
-
if isinstance(target_message, PartialMessage):
|
|
476
|
-
try:
|
|
477
|
-
target_message = await target_message.fetch()
|
|
478
|
-
except:
|
|
479
|
-
raise Exception(f"[is_system_message] Message ID to get is not found !")
|
|
444
|
+
target_message = ctx if message is None else await utils_get_message(ctx, message)
|
|
480
445
|
|
|
481
446
|
return BoolNode(target_message.is_system())
|
|
482
447
|
|
|
@@ -506,8 +471,7 @@ async def dshell_scan_message(ctx: Message,
|
|
|
506
471
|
|
|
507
472
|
target_channel = ctx.channel if channel is None else ctx.guild.get_channel(channel)
|
|
508
473
|
|
|
509
|
-
|
|
510
|
-
raise Exception(f"Channel with ID {channel} not found in guild {ctx.guild.name}.")
|
|
474
|
+
_validate_not_none(target_channel, f"Channel {channel} not found in guild {ctx.guild.name} !")
|
|
511
475
|
|
|
512
476
|
if regex is not None:
|
|
513
477
|
try:
|
|
@@ -2,7 +2,10 @@ from Dshell.full_import import (Message,
|
|
|
2
2
|
PartialMessage,
|
|
3
3
|
AllowedMentions,
|
|
4
4
|
search,
|
|
5
|
-
Optional
|
|
5
|
+
Optional,
|
|
6
|
+
NotFound,
|
|
7
|
+
Forbidden,
|
|
8
|
+
HTTPException)
|
|
6
9
|
|
|
7
10
|
from ...DshellInterpreteur.cached_messages import dshell_cached_messages
|
|
8
11
|
from ...DshellParser.ast_nodes import StrNode, BoolNode, IntNode
|
|
@@ -12,7 +15,7 @@ from Dshell.full_import import Union
|
|
|
12
15
|
from .utils_type_validation import (_validate_optional_bool,
|
|
13
16
|
_validate_required_bool)
|
|
14
17
|
|
|
15
|
-
def utils_get_message(ctx: Message, message: Union[IntNode, StrNode]) ->
|
|
18
|
+
async def utils_get_message(ctx: Message, message: Union[IntNode, StrNode]) -> Message:
|
|
16
19
|
"""
|
|
17
20
|
Récupère l'objet message Discord à partir d'un ID ou d'un lien.
|
|
18
21
|
|
|
@@ -42,7 +45,7 @@ def utils_get_message(ctx: Message, message: Union[IntNode, StrNode]) -> Union[P
|
|
|
42
45
|
if message in cached_messages:
|
|
43
46
|
return cached_messages[message]
|
|
44
47
|
|
|
45
|
-
cached_messages[message] = ctx.channel.get_partial_message(message)
|
|
48
|
+
cached_messages[message] = await utils_fetch_partial_message(ctx.channel.get_partial_message(message))
|
|
46
49
|
dshell_cached_messages.set(cached_messages)
|
|
47
50
|
return cached_messages[message]
|
|
48
51
|
|
|
@@ -60,13 +63,37 @@ def utils_get_message(ctx: Message, message: Union[IntNode, StrNode]) -> Union[P
|
|
|
60
63
|
channel = ctx.guild.get_channel(channel_id)
|
|
61
64
|
if channel is None:
|
|
62
65
|
raise Exception(f"Channel with ID {channel_id} not found in guild {ctx.guild.name}.")
|
|
63
|
-
cached_messages[message_id] = channel.get_partial_message(message_id)
|
|
66
|
+
cached_messages[message_id] = await utils_fetch_partial_message(channel.get_partial_message(message_id))
|
|
64
67
|
dshell_cached_messages.set(cached_messages)
|
|
65
68
|
return cached_messages[message_id]
|
|
66
69
|
|
|
67
70
|
raise Exception(f"Message must be an integer or a string, not {type(message)} !")
|
|
68
71
|
|
|
69
72
|
|
|
73
|
+
async def utils_fetch_partial_message(partial_message: Union[Message, PartialMessage]) -> Message:
|
|
74
|
+
"""
|
|
75
|
+
Fetch le message et renvoie une instance de Message s'il existe
|
|
76
|
+
:param ctx:
|
|
77
|
+
:param partial_message:
|
|
78
|
+
:return:
|
|
79
|
+
"""
|
|
80
|
+
|
|
81
|
+
if not isinstance(partial_message, PartialMessage):
|
|
82
|
+
if isinstance(partial_message, Message):
|
|
83
|
+
return partial_message
|
|
84
|
+
raise Exception(f"Expected a PartialMessage or Message, got '{type(partial_message)}' !")
|
|
85
|
+
|
|
86
|
+
try:
|
|
87
|
+
message = await partial_message.fetch()
|
|
88
|
+
except NotFound:
|
|
89
|
+
raise Exception(f"Message '{partial_message.id}' not found !")
|
|
90
|
+
except Forbidden:
|
|
91
|
+
raise Exception(f"I don't have the permission to fetch the message '{partial_message.id}' !")
|
|
92
|
+
except HTTPException:
|
|
93
|
+
raise Exception(f"An internal error occurred when i try to fetch the message '{partial_message.id}'. Please, contact the support if this problem persists !")
|
|
94
|
+
return message
|
|
95
|
+
|
|
96
|
+
|
|
70
97
|
def utils_autorised_mentions(global_mentions: Optional[BoolNode] = None,
|
|
71
98
|
everyone_mention: BoolNode = BoolNode(1),
|
|
72
99
|
roles_mentions: BoolNode = BoolNode(1),
|
|
@@ -52,6 +52,7 @@ class DshellInterpreteur:
|
|
|
52
52
|
self.env.update({
|
|
53
53
|
'__ret__': None, # environment variables, '__ret__' is used to store the return value of commands
|
|
54
54
|
'__loop__': None, # used to store the current loop variable in loop nodes if the loop identifier is not specified
|
|
55
|
+
'__break__': BoolNode(0), # used to break a loop
|
|
55
56
|
|
|
56
57
|
'__author__': IntNode(message.author.id),
|
|
57
58
|
'__author_name__': StrNode(message.author.name),
|
|
@@ -150,6 +151,13 @@ class DshellInterpreteur:
|
|
|
150
151
|
self.env.set(node.variable.name.value, i)
|
|
151
152
|
await self.execute(node.body)
|
|
152
153
|
|
|
154
|
+
if self.env.get('__break__'):
|
|
155
|
+
self.env.set('__break__', BoolNode(0))
|
|
156
|
+
break
|
|
157
|
+
|
|
158
|
+
async def _execute_break_node(self, node: BreakNode):
|
|
159
|
+
"""Execute a break node."""
|
|
160
|
+
self.env.set('__break__', BoolNode(1))
|
|
153
161
|
|
|
154
162
|
async def _execute_var_node(self, node: VarNode):
|
|
155
163
|
"""Execute a variable assignment node."""
|
|
@@ -17,6 +17,7 @@ __all__ = [
|
|
|
17
17
|
'ElifNode',
|
|
18
18
|
'IfNode',
|
|
19
19
|
'LoopNode',
|
|
20
|
+
'BreakNode',
|
|
20
21
|
'ArgsCommandNode',
|
|
21
22
|
'CommandNode',
|
|
22
23
|
'VarNode',
|
|
@@ -293,6 +294,25 @@ class LoopNode(ASTNode):
|
|
|
293
294
|
"body": [token.to_dict() for token in self.body]
|
|
294
295
|
}
|
|
295
296
|
|
|
297
|
+
class BreakNode(ASTNode):
|
|
298
|
+
"""
|
|
299
|
+
Node representing a break loop structure in the AST.
|
|
300
|
+
"""
|
|
301
|
+
|
|
302
|
+
def __init__(self, line: int):
|
|
303
|
+
super().__init__(line)
|
|
304
|
+
|
|
305
|
+
def __repr__(self):
|
|
306
|
+
return "<Break>"
|
|
307
|
+
|
|
308
|
+
def to_dict(self):
|
|
309
|
+
"""
|
|
310
|
+
Convert the BreakNode to a dictionary representation.
|
|
311
|
+
:return:
|
|
312
|
+
"""
|
|
313
|
+
return {
|
|
314
|
+
"type": "Break",
|
|
315
|
+
}
|
|
296
316
|
|
|
297
317
|
class ArgsCommandNode(ASTNode):
|
|
298
318
|
"""
|
{dshellinterpreter-1.2.0.8 → dshellinterpreter-1.2.0.10}/Dshell/DshellTokenizer/dshell_keywords.py
RENAMED
|
@@ -14,7 +14,7 @@ from Dshell.full_import import Callable
|
|
|
14
14
|
from ..DISCORD_COMMANDS.dshell_file import dshell_read_file, dshell_write_file, dshell_get_message_files
|
|
15
15
|
|
|
16
16
|
dshell_keyword: set[str] = {
|
|
17
|
-
'if', 'else', 'elif', 'loop', '#end', 'var', '#loop', '#if', 'sleep', 'param', '#param', 'code', '#code', 'eval', 'return'
|
|
17
|
+
'if', 'else', 'elif', 'loop', '#end', 'var', '#loop', '#if', 'sleep', 'param', '#param', 'code', '#code', 'eval', 'return', 'break'
|
|
18
18
|
}
|
|
19
19
|
|
|
20
20
|
dshell_discord_keyword: set[str] = {
|
|
@@ -5,7 +5,7 @@ with open("README.md", "r") as fh:
|
|
|
5
5
|
|
|
6
6
|
setup(
|
|
7
7
|
name="dshellInterpreter",
|
|
8
|
-
version="1.2.0.
|
|
8
|
+
version="1.2.0.10",
|
|
9
9
|
author="Chronos",
|
|
10
10
|
author_email="vagabonwalybi@gmail.com",
|
|
11
11
|
description="A Discord bot interpreter for creating custom commands and automations.",
|
{dshellinterpreter-1.2.0.8 → dshellinterpreter-1.2.0.10}/Dshell/DISCORD_COMMANDS/__init__.py
RENAMED
|
File without changes
|
{dshellinterpreter-1.2.0.8 → dshellinterpreter-1.2.0.10}/Dshell/DISCORD_COMMANDS/dshell_embed.py
RENAMED
|
File without changes
|
|
File without changes
|
{dshellinterpreter-1.2.0.8 → dshellinterpreter-1.2.0.10}/Dshell/DISCORD_COMMANDS/dshell_member.py
RENAMED
|
File without changes
|
{dshellinterpreter-1.2.0.8 → dshellinterpreter-1.2.0.10}/Dshell/DISCORD_COMMANDS/dshell_pastbin.py
RENAMED
|
File without changes
|
{dshellinterpreter-1.2.0.8 → dshellinterpreter-1.2.0.10}/Dshell/DISCORD_COMMANDS/dshell_role.py
RENAMED
|
File without changes
|
{dshellinterpreter-1.2.0.8 → dshellinterpreter-1.2.0.10}/Dshell/DISCORD_COMMANDS/dshell_ui.py
RENAMED
|
File without changes
|
{dshellinterpreter-1.2.0.8 → dshellinterpreter-1.2.0.10}/Dshell/DISCORD_COMMANDS/utils/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
{dshellinterpreter-1.2.0.8 → dshellinterpreter-1.2.0.10}/Dshell/DISCORD_COMMANDS/utils/utils_file.py
RENAMED
|
File without changes
|
|
File without changes
|
{dshellinterpreter-1.2.0.8 → dshellinterpreter-1.2.0.10}/Dshell/DISCORD_COMMANDS/utils/utils_list.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{dshellinterpreter-1.2.0.8 → dshellinterpreter-1.2.0.10}/Dshell/DshellInterpreteur/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{dshellinterpreter-1.2.0.8 → dshellinterpreter-1.2.0.10}/Dshell/DshellInterpreteur/dshell_scope.py
RENAMED
|
File without changes
|
{dshellinterpreter-1.2.0.8 → dshellinterpreter-1.2.0.10}/Dshell/DshellInterpreteur/errors.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{dshellinterpreter-1.2.0.8 → dshellinterpreter-1.2.0.10}/Dshell/DshellParser/dshell_parser.py
RENAMED
|
File without changes
|
|
File without changes
|
{dshellinterpreter-1.2.0.8 → dshellinterpreter-1.2.0.10}/Dshell/DshellPreProcess/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{dshellinterpreter-1.2.0.8 → dshellinterpreter-1.2.0.10}/Dshell/DshellTokenizer/dshell_token_type.py
RENAMED
|
File without changes
|
{dshellinterpreter-1.2.0.8 → dshellinterpreter-1.2.0.10}/Dshell/DshellTokenizer/dshell_tokenizer.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{dshellinterpreter-1.2.0.8 → dshellinterpreter-1.2.0.10}/dshellInterpreter.egg-info/SOURCES.txt
RENAMED
|
File without changes
|
|
File without changes
|
{dshellinterpreter-1.2.0.8 → dshellinterpreter-1.2.0.10}/dshellInterpreter.egg-info/requires.txt
RENAMED
|
File without changes
|
{dshellinterpreter-1.2.0.8 → dshellinterpreter-1.2.0.10}/dshellInterpreter.egg-info/top_level.txt
RENAMED
|
File without changes
|
|
File without changes
|