dshellInterpreter 0.2.18.6__tar.gz → 0.2.18.7__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.
Potentially problematic release.
This version of dshellInterpreter might be problematic. Click here for more details.
- {dshellinterpreter-0.2.18.6 → dshellinterpreter-0.2.18.7}/Dshell/_DshellInterpreteur/dshell_interpreter.py +57 -53
- {dshellinterpreter-0.2.18.6/dshellInterpreter.egg-info → dshellinterpreter-0.2.18.7}/PKG-INFO +1 -1
- {dshellinterpreter-0.2.18.6 → dshellinterpreter-0.2.18.7/dshellInterpreter.egg-info}/PKG-INFO +1 -1
- {dshellinterpreter-0.2.18.6 → dshellinterpreter-0.2.18.7}/setup.py +1 -1
- {dshellinterpreter-0.2.18.6 → dshellinterpreter-0.2.18.7}/Dshell/DISCORD_COMMANDS/__init__.py +0 -0
- {dshellinterpreter-0.2.18.6 → dshellinterpreter-0.2.18.7}/Dshell/DISCORD_COMMANDS/dshell_channel.py +0 -0
- {dshellinterpreter-0.2.18.6 → dshellinterpreter-0.2.18.7}/Dshell/DISCORD_COMMANDS/dshell_interaction.py +0 -0
- {dshellinterpreter-0.2.18.6 → dshellinterpreter-0.2.18.7}/Dshell/DISCORD_COMMANDS/dshell_member.py +0 -0
- {dshellinterpreter-0.2.18.6 → dshellinterpreter-0.2.18.7}/Dshell/DISCORD_COMMANDS/dshell_message.py +0 -0
- {dshellinterpreter-0.2.18.6 → dshellinterpreter-0.2.18.7}/Dshell/DISCORD_COMMANDS/dshell_pastbin.py +0 -0
- {dshellinterpreter-0.2.18.6 → dshellinterpreter-0.2.18.7}/Dshell/DISCORD_COMMANDS/dshell_role.py +0 -0
- {dshellinterpreter-0.2.18.6 → dshellinterpreter-0.2.18.7}/Dshell/DISCORD_COMMANDS/utils/__init__.py +0 -0
- {dshellinterpreter-0.2.18.6 → dshellinterpreter-0.2.18.7}/Dshell/DISCORD_COMMANDS/utils/utils_global.py +0 -0
- {dshellinterpreter-0.2.18.6 → dshellinterpreter-0.2.18.7}/Dshell/DISCORD_COMMANDS/utils/utils_list.py +0 -0
- {dshellinterpreter-0.2.18.6 → dshellinterpreter-0.2.18.7}/Dshell/DISCORD_COMMANDS/utils/utils_member.py +0 -0
- {dshellinterpreter-0.2.18.6 → dshellinterpreter-0.2.18.7}/Dshell/DISCORD_COMMANDS/utils/utils_message.py +0 -0
- {dshellinterpreter-0.2.18.6 → dshellinterpreter-0.2.18.7}/Dshell/DISCORD_COMMANDS/utils/utils_permissions.py +0 -0
- {dshellinterpreter-0.2.18.6 → dshellinterpreter-0.2.18.7}/Dshell/DISCORD_COMMANDS/utils/utils_string.py +0 -0
- {dshellinterpreter-0.2.18.6 → dshellinterpreter-0.2.18.7}/Dshell/DISCORD_COMMANDS/utils/utils_thread.py +0 -0
- {dshellinterpreter-0.2.18.6 → dshellinterpreter-0.2.18.7}/Dshell/_DshellInterpreteur/__init__.py +0 -0
- {dshellinterpreter-0.2.18.6 → dshellinterpreter-0.2.18.7}/Dshell/_DshellInterpreteur/errors.py +0 -0
- {dshellinterpreter-0.2.18.6 → dshellinterpreter-0.2.18.7}/Dshell/_DshellParser/__init__.py +0 -0
- {dshellinterpreter-0.2.18.6 → dshellinterpreter-0.2.18.7}/Dshell/_DshellParser/ast_nodes.py +0 -0
- {dshellinterpreter-0.2.18.6 → dshellinterpreter-0.2.18.7}/Dshell/_DshellParser/dshell_parser.py +0 -0
- {dshellinterpreter-0.2.18.6 → dshellinterpreter-0.2.18.7}/Dshell/_DshellTokenizer/__init__.py +0 -0
- {dshellinterpreter-0.2.18.6 → dshellinterpreter-0.2.18.7}/Dshell/_DshellTokenizer/dshell_keywords.py +0 -0
- {dshellinterpreter-0.2.18.6 → dshellinterpreter-0.2.18.7}/Dshell/_DshellTokenizer/dshell_token_type.py +0 -0
- {dshellinterpreter-0.2.18.6 → dshellinterpreter-0.2.18.7}/Dshell/_DshellTokenizer/dshell_tokenizer.py +0 -0
- {dshellinterpreter-0.2.18.6 → dshellinterpreter-0.2.18.7}/Dshell/__init__.py +0 -0
- {dshellinterpreter-0.2.18.6 → dshellinterpreter-0.2.18.7}/Dshell/_utils.py +0 -0
- {dshellinterpreter-0.2.18.6 → dshellinterpreter-0.2.18.7}/LICENSE +0 -0
- {dshellinterpreter-0.2.18.6 → dshellinterpreter-0.2.18.7}/README.md +0 -0
- {dshellinterpreter-0.2.18.6 → dshellinterpreter-0.2.18.7}/dshellInterpreter.egg-info/SOURCES.txt +0 -0
- {dshellinterpreter-0.2.18.6 → dshellinterpreter-0.2.18.7}/dshellInterpreter.egg-info/dependency_links.txt +0 -0
- {dshellinterpreter-0.2.18.6 → dshellinterpreter-0.2.18.7}/dshellInterpreter.egg-info/requires.txt +0 -0
- {dshellinterpreter-0.2.18.6 → dshellinterpreter-0.2.18.7}/dshellInterpreter.egg-info/top_level.txt +0 -0
- {dshellinterpreter-0.2.18.6 → dshellinterpreter-0.2.18.7}/setup.cfg +0 -0
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
from asyncio import sleep,
|
|
1
|
+
from asyncio import sleep, create_task
|
|
2
2
|
from re import findall
|
|
3
3
|
from typing import TypeVar, Union, Any, Optional, Callable
|
|
4
4
|
from copy import deepcopy
|
|
@@ -125,18 +125,18 @@ class DshellInterpreteur:
|
|
|
125
125
|
self.env['__ret__'] = result # global return variable for all commands
|
|
126
126
|
|
|
127
127
|
elif isinstance(node, ParamNode):
|
|
128
|
-
params = get_params(node, self)
|
|
128
|
+
params = await get_params(node, self)
|
|
129
129
|
self.env.update(params) # update the environment
|
|
130
130
|
|
|
131
131
|
elif isinstance(node, IfNode):
|
|
132
132
|
elif_valid = False
|
|
133
|
-
if eval_expression(node.condition, self):
|
|
133
|
+
if await eval_expression(node.condition, self):
|
|
134
134
|
await self.execute(node.body)
|
|
135
135
|
continue
|
|
136
136
|
elif node.elif_nodes:
|
|
137
137
|
|
|
138
138
|
for i in node.elif_nodes:
|
|
139
|
-
if eval_expression(i.condition, self):
|
|
139
|
+
if await eval_expression(i.condition, self):
|
|
140
140
|
await self.execute(i.body)
|
|
141
141
|
elif_valid = True
|
|
142
142
|
break
|
|
@@ -146,7 +146,7 @@ class DshellInterpreteur:
|
|
|
146
146
|
|
|
147
147
|
elif isinstance(node, LoopNode):
|
|
148
148
|
self.env[node.variable.name.value] = 0
|
|
149
|
-
for i in DshellIterator(eval_expression(node.variable.body, self)):
|
|
149
|
+
for i in DshellIterator(await eval_expression(node.variable.body, self)):
|
|
150
150
|
self.env[node.variable.name.value] = i
|
|
151
151
|
c = deepcopy(node.body)
|
|
152
152
|
await self.execute(c)
|
|
@@ -156,34 +156,34 @@ class DshellInterpreteur:
|
|
|
156
156
|
|
|
157
157
|
first_node = node.body[0]
|
|
158
158
|
if isinstance(first_node, IfNode):
|
|
159
|
-
self.env[node.name.value] = eval_expression_inline(first_node, self)
|
|
159
|
+
self.env[node.name.value] = await eval_expression_inline(first_node, self)
|
|
160
160
|
|
|
161
161
|
elif isinstance(first_node, EmbedNode):
|
|
162
162
|
# rebuild the embed if it already exists
|
|
163
163
|
if node.name.value in self.env and isinstance(self.env[node.name.value], Embed):
|
|
164
|
-
self.env[node.name.value] = rebuild_embed(self.env[node.name.value], first_node.body, first_node.fields, self)
|
|
164
|
+
self.env[node.name.value] = await rebuild_embed(self.env[node.name.value], first_node.body, first_node.fields, self)
|
|
165
165
|
else:
|
|
166
|
-
self.env[node.name.value] = build_embed(first_node.body, first_node.fields, self)
|
|
166
|
+
self.env[node.name.value] = await build_embed(first_node.body, first_node.fields, self)
|
|
167
167
|
|
|
168
168
|
elif isinstance(first_node, PermissionNode):
|
|
169
169
|
# rebuild the permissions if it already exists
|
|
170
170
|
if node.name.value in self.env and isinstance(self.env[node.name.value], dict):
|
|
171
|
-
self.env[node.name.value].update(build_permission(first_node.body, self))
|
|
171
|
+
self.env[node.name.value].update(await build_permission(first_node.body, self))
|
|
172
172
|
else:
|
|
173
|
-
self.env[node.name.value] = build_permission(first_node.body, self)
|
|
173
|
+
self.env[node.name.value] = await build_permission(first_node.body, self)
|
|
174
174
|
|
|
175
175
|
elif isinstance(first_node, UiNode):
|
|
176
176
|
# rebuild the UI if it already exists
|
|
177
177
|
if node.name.value in self.env and isinstance(self.env[node.name.value], EasyModifiedViews):
|
|
178
|
-
self.env[node.name.value] = rebuild_ui(first_node, self.env[node.name.value], self)
|
|
178
|
+
self.env[node.name.value] = await rebuild_ui(first_node, self.env[node.name.value], self)
|
|
179
179
|
else:
|
|
180
|
-
self.env[node.name.value] = build_ui(first_node, self)
|
|
180
|
+
self.env[node.name.value] = await build_ui(first_node, self)
|
|
181
181
|
|
|
182
182
|
else:
|
|
183
|
-
self.env[node.name.value] = eval_expression(node.body, self)
|
|
183
|
+
self.env[node.name.value] = await eval_expression(node.body, self)
|
|
184
184
|
|
|
185
185
|
elif isinstance(node, SleepNode):
|
|
186
|
-
sleep_time = eval_expression(node.body, self)
|
|
186
|
+
sleep_time = await eval_expression(node.body, self)
|
|
187
187
|
if sleep_time > 3600:
|
|
188
188
|
raise Exception(f"Sleep time is too long! ({sleep_time} seconds) - maximum is 3600 seconds)")
|
|
189
189
|
elif sleep_time < 1:
|
|
@@ -193,12 +193,12 @@ class DshellInterpreteur:
|
|
|
193
193
|
|
|
194
194
|
|
|
195
195
|
elif isinstance(node, EndNode):
|
|
196
|
-
if self.eval_data_token(node.error_message):
|
|
196
|
+
if await self.eval_data_token(node.error_message):
|
|
197
197
|
raise RuntimeError("Execution stopped - EndNode encountered")
|
|
198
198
|
else:
|
|
199
199
|
raise DshellInterpreterStopExecution()
|
|
200
200
|
|
|
201
|
-
def eval_data_token(self, token: Token):
|
|
201
|
+
async def eval_data_token(self, token: Token):
|
|
202
202
|
"""
|
|
203
203
|
Eval a data token and returns its value in Python.
|
|
204
204
|
:param token: The token to evaluate.
|
|
@@ -217,13 +217,13 @@ class DshellInterpreteur:
|
|
|
217
217
|
return None
|
|
218
218
|
elif token.type == DTT.LIST:
|
|
219
219
|
return ListNode(
|
|
220
|
-
[self.eval_data_token(tok) for tok in token.value]) # token.value contient déjà une liste de Token
|
|
220
|
+
[await self.eval_data_token(tok) for tok in token.value]) # token.value contient déjà une liste de Token
|
|
221
221
|
elif token.type == DTT.IDENT:
|
|
222
222
|
if token.value in self.env.keys():
|
|
223
223
|
return self.env[token.value]
|
|
224
224
|
return token.value
|
|
225
225
|
elif token.type == DTT.EVAL_GROUP:
|
|
226
|
-
|
|
226
|
+
await self.execute(token.value)
|
|
227
227
|
return self.env['__ret__']
|
|
228
228
|
elif token.type == DTT.STR:
|
|
229
229
|
for match in findall(rf"\$({'|'.join(self.env.keys())})", token.value):
|
|
@@ -233,21 +233,22 @@ class DshellInterpreteur:
|
|
|
233
233
|
return token.value # fallback
|
|
234
234
|
|
|
235
235
|
|
|
236
|
-
def get_params(node: ParamNode, interpreter: DshellInterpreteur) -> dict[str, Any]:
|
|
236
|
+
async def get_params(node: ParamNode, interpreter: DshellInterpreteur) -> dict[str, Any]:
|
|
237
237
|
"""
|
|
238
238
|
Get the parameters from a ParamNode.
|
|
239
239
|
:param node: The ParamNode to get the parameters from.
|
|
240
240
|
:param interpreter: The Dshell interpreter instance.
|
|
241
241
|
:return: A dictionary of parameters.
|
|
242
242
|
"""
|
|
243
|
-
|
|
244
|
-
|
|
243
|
+
regrouped_parameters = await regroupe_commandes(node.body, interpreter)
|
|
244
|
+
regrouped_args: dict[str, list] = regrouped_parameters[0] # just regroup the commands, no need to do anything else
|
|
245
245
|
regrouped_args.pop('*', ())
|
|
246
246
|
englobe_args = regrouped_args.pop('--*', {}) # get the arguments that are not mandatory
|
|
247
247
|
obligate = [i for i in regrouped_args.keys() if regrouped_args[i] == '*'] # get the obligatory parameters
|
|
248
248
|
|
|
249
249
|
g: list[list[Token]] = DshellTokenizer(interpreter.vars).start()
|
|
250
|
-
|
|
250
|
+
regrouped_parameters = await regroupe_commandes(g[0], interpreter)
|
|
251
|
+
env_give_variables = regrouped_parameters[0] if g else {}
|
|
251
252
|
|
|
252
253
|
gived_variables = env_give_variables.pop('*', ()) # get the variables given in the environment
|
|
253
254
|
englobe_gived_variables: dict = env_give_variables.pop('--*',
|
|
@@ -283,19 +284,19 @@ def get_params(node: ParamNode, interpreter: DshellInterpreteur) -> dict[str, An
|
|
|
283
284
|
return regrouped_args
|
|
284
285
|
|
|
285
286
|
|
|
286
|
-
def eval_expression_inline(if_node: IfNode, interpreter: DshellInterpreteur) -> Token:
|
|
287
|
+
async def eval_expression_inline(if_node: IfNode, interpreter: DshellInterpreteur) -> Token:
|
|
287
288
|
"""
|
|
288
289
|
Eval a conditional expression inline.
|
|
289
290
|
:param if_node: The IfNode to evaluate.
|
|
290
291
|
:param interpreter: The Dshell interpreter instance.
|
|
291
292
|
"""
|
|
292
|
-
if eval_expression(if_node.condition, interpreter):
|
|
293
|
-
return eval_expression(if_node.body, interpreter)
|
|
293
|
+
if await eval_expression(if_node.condition, interpreter):
|
|
294
|
+
return await eval_expression(if_node.body, interpreter)
|
|
294
295
|
else:
|
|
295
|
-
return eval_expression(if_node.else_body.body, interpreter)
|
|
296
|
+
return await eval_expression(if_node.else_body.body, interpreter)
|
|
296
297
|
|
|
297
298
|
|
|
298
|
-
def eval_expression(tokens: list[Token], interpreter: DshellInterpreteur) -> Any:
|
|
299
|
+
async def eval_expression(tokens: list[Token], interpreter: DshellInterpreteur) -> Any:
|
|
299
300
|
"""
|
|
300
301
|
Evaluates an arithmetic and logical expression.
|
|
301
302
|
:param tokens: A list of tokens representing the expression.
|
|
@@ -307,7 +308,7 @@ def eval_expression(tokens: list[Token], interpreter: DshellInterpreteur) -> Any
|
|
|
307
308
|
for token in postfix:
|
|
308
309
|
|
|
309
310
|
if token.type in {DTT.INT, DTT.FLOAT, DTT.BOOL, DTT.STR, DTT.LIST, DTT.IDENT}:
|
|
310
|
-
stack.append(interpreter.eval_data_token(token))
|
|
311
|
+
stack.append(await interpreter.eval_data_token(token))
|
|
311
312
|
|
|
312
313
|
elif token.type in (DTT.MATHS_OPERATOR, DTT.LOGIC_OPERATOR, DTT.LOGIC_WORD_OPERATOR):
|
|
313
314
|
op = token.value
|
|
@@ -347,7 +348,8 @@ async def call_function(function: Callable, args: ArgsCommandNode, interpreter:
|
|
|
347
348
|
:param args: The arguments to pass to the function.
|
|
348
349
|
:param interpreter: The Dshell interpreter instance.
|
|
349
350
|
"""
|
|
350
|
-
reformatted = regroupe_commandes(args.body, interpreter)
|
|
351
|
+
reformatted = await regroupe_commandes(args.body, interpreter)
|
|
352
|
+
reformatted = reformatted[0]
|
|
351
353
|
|
|
352
354
|
# conversion des args en valeurs Python
|
|
353
355
|
absolute_args = reformatted.pop('*', list())
|
|
@@ -361,7 +363,7 @@ async def call_function(function: Callable, args: ArgsCommandNode, interpreter:
|
|
|
361
363
|
return await function(*absolute_args, **keyword_args)
|
|
362
364
|
|
|
363
365
|
|
|
364
|
-
def regroupe_commandes(body: list[Token], interpreter: DshellInterpreteur, normalise: bool = False) -> list[dict[str, list[Any]]]:
|
|
366
|
+
async def regroupe_commandes(body: list[Token], interpreter: DshellInterpreteur, normalise: bool = False) -> list[dict[str, list[Any]]]:
|
|
365
367
|
"""
|
|
366
368
|
Groups the command arguments in the form of a python dictionary.
|
|
367
369
|
Note that you can specify the parameter you wish to pass via -- followed by the parameter name. But this is not mandatory!
|
|
@@ -397,7 +399,7 @@ def regroupe_commandes(body: list[Token], interpreter: DshellInterpreteur, norma
|
|
|
397
399
|
|
|
398
400
|
elif body[
|
|
399
401
|
i].type == DTT.SUB_SEPARATOR: # allows to delimit parameters and to have several with the same name
|
|
400
|
-
list_tokens += regroupe_commandes(
|
|
402
|
+
list_tokens += await regroupe_commandes(
|
|
401
403
|
[Token(
|
|
402
404
|
type_=DTT.SEPARATOR, value=body[i].value, position=body[i].position)
|
|
403
405
|
] + body[i + 1:], interpreter
|
|
@@ -415,53 +417,55 @@ def regroupe_commandes(body: list[Token], interpreter: DshellInterpreteur, norma
|
|
|
415
417
|
|
|
416
418
|
else:
|
|
417
419
|
if current_arg == '*':
|
|
418
|
-
tokens[current_arg].append(interpreter.eval_data_token(body[i]))
|
|
420
|
+
tokens[current_arg].append(await interpreter.eval_data_token(body[i]))
|
|
419
421
|
else:
|
|
420
|
-
tokens[current_arg] = interpreter.eval_data_token(body[i]) # add the token to the current argument
|
|
422
|
+
tokens[current_arg] = await interpreter.eval_data_token(body[i]) # add the token to the current argument
|
|
421
423
|
i += 1
|
|
422
424
|
|
|
423
425
|
return list_tokens
|
|
424
426
|
|
|
425
427
|
|
|
426
|
-
def build_embed_args(body: list[Token], fields: list[FieldEmbedNode], interpreter: DshellInterpreteur) -> tuple[dict, list[dict]]:
|
|
428
|
+
async def build_embed_args(body: list[Token], fields: list[FieldEmbedNode], interpreter: DshellInterpreteur) -> tuple[dict, list[dict]]:
|
|
427
429
|
"""
|
|
428
430
|
Builds the arguments for an embed from the command information.
|
|
429
431
|
"""
|
|
430
|
-
|
|
432
|
+
regrouped_parameters = await regroupe_commandes(body, interpreter)
|
|
433
|
+
args_main_embed: dict[str, list[Any]] = regrouped_parameters[0]
|
|
431
434
|
args_main_embed.pop('*') # remove unspecified parameters for the embed
|
|
432
435
|
args_main_embed.pop('--*')
|
|
433
436
|
args_main_embed: dict[str, Token] # specify what it contains from now on
|
|
434
437
|
|
|
435
438
|
args_fields: list[dict[str, Token]] = []
|
|
436
439
|
for field in fields: # do the same for the fields
|
|
437
|
-
|
|
438
|
-
|
|
439
|
-
|
|
440
|
-
|
|
441
|
-
|
|
440
|
+
y = await regroupe_commandes(field.body, interpreter)
|
|
441
|
+
args_field = y[0]
|
|
442
|
+
args_field.pop('*')
|
|
443
|
+
args_field.pop('--*')
|
|
444
|
+
args_field: dict[str, Token]
|
|
445
|
+
args_fields.append(args_field)
|
|
442
446
|
|
|
443
447
|
if 'color' in args_main_embed:
|
|
444
448
|
args_main_embed['color'] = build_colour(args_main_embed['color']) # convert color to Colour object or int
|
|
445
449
|
|
|
446
450
|
return args_main_embed, args_fields
|
|
447
451
|
|
|
448
|
-
def build_embed(body: list[Token], fields: list[FieldEmbedNode], interpreter: DshellInterpreteur) -> Embed:
|
|
452
|
+
async def build_embed(body: list[Token], fields: list[FieldEmbedNode], interpreter: DshellInterpreteur) -> Embed:
|
|
449
453
|
"""
|
|
450
454
|
Builds an embed from the command information.
|
|
451
455
|
"""
|
|
452
456
|
|
|
453
|
-
args_main_embed, args_fields = build_embed_args(body, fields, interpreter)
|
|
457
|
+
args_main_embed, args_fields = await build_embed_args(body, fields, interpreter)
|
|
454
458
|
embed = Embed(**args_main_embed) # build the main embed
|
|
455
459
|
for field in args_fields:
|
|
456
460
|
embed.add_field(**field) # add all fields
|
|
457
461
|
|
|
458
462
|
return embed
|
|
459
463
|
|
|
460
|
-
def rebuild_embed(embed: Embed, body: list[Token], fields: list[FieldEmbedNode], interpreter: DshellInterpreteur) -> Embed:
|
|
464
|
+
async def rebuild_embed(embed: Embed, body: list[Token], fields: list[FieldEmbedNode], interpreter: DshellInterpreteur) -> Embed:
|
|
461
465
|
"""
|
|
462
466
|
Rebuilds an embed from an existing embed and the command information.
|
|
463
467
|
"""
|
|
464
|
-
args_main_embed, args_fields = build_embed_args(body, fields, interpreter)
|
|
468
|
+
args_main_embed, args_fields = await build_embed_args(body, fields, interpreter)
|
|
465
469
|
|
|
466
470
|
for key, value in args_main_embed.items():
|
|
467
471
|
if key == 'color':
|
|
@@ -491,7 +495,7 @@ def build_colour(color: Union[int, ListNode]) -> Union[Colour, int]:
|
|
|
491
495
|
else:
|
|
492
496
|
raise TypeError(f"Color must be an integer or a ListNode, not {type(color)} !")
|
|
493
497
|
|
|
494
|
-
def build_ui_parameters(ui_node: UiNode, interpreter: DshellInterpreteur):
|
|
498
|
+
async def build_ui_parameters(ui_node: UiNode, interpreter: DshellInterpreteur):
|
|
495
499
|
"""
|
|
496
500
|
Builds the parameters for a UI component from the UiNode.
|
|
497
501
|
Can accept buttons and select menus.
|
|
@@ -500,8 +504,8 @@ def build_ui_parameters(ui_node: UiNode, interpreter: DshellInterpreteur):
|
|
|
500
504
|
:return:
|
|
501
505
|
"""
|
|
502
506
|
for ident_component in range(len(ui_node.buttons)):
|
|
503
|
-
|
|
504
|
-
|
|
507
|
+
regrouped_parameters = await regroupe_commandes(ui_node.buttons[ident_component].body, interpreter, normalise=True)
|
|
508
|
+
args_button: dict[str, list[Any]] = regrouped_parameters[0]
|
|
505
509
|
args_button.pop('--*', ())
|
|
506
510
|
|
|
507
511
|
code = args_button.pop('code', None)
|
|
@@ -519,7 +523,7 @@ def build_ui_parameters(ui_node: UiNode, interpreter: DshellInterpreteur):
|
|
|
519
523
|
args = args_button.pop('*', ())
|
|
520
524
|
yield args, args_button, code
|
|
521
525
|
|
|
522
|
-
def build_ui(ui_node: UiNode, interpreter: DshellInterpreteur) -> EasyModifiedViews:
|
|
526
|
+
async def build_ui(ui_node: UiNode, interpreter: DshellInterpreteur) -> EasyModifiedViews:
|
|
523
527
|
"""
|
|
524
528
|
Builds a UI component from the UiNode.
|
|
525
529
|
Can accept buttons and select menus.
|
|
@@ -529,7 +533,7 @@ def build_ui(ui_node: UiNode, interpreter: DshellInterpreteur) -> EasyModifiedVi
|
|
|
529
533
|
"""
|
|
530
534
|
view = EasyModifiedViews()
|
|
531
535
|
|
|
532
|
-
for args, args_button, code in build_ui_parameters(ui_node, interpreter):
|
|
536
|
+
async for args, args_button, code in build_ui_parameters(ui_node, interpreter):
|
|
533
537
|
b = Button(**args_button)
|
|
534
538
|
|
|
535
539
|
view.add_items(b)
|
|
@@ -537,14 +541,14 @@ def build_ui(ui_node: UiNode, interpreter: DshellInterpreteur) -> EasyModifiedVi
|
|
|
537
541
|
|
|
538
542
|
return view
|
|
539
543
|
|
|
540
|
-
def rebuild_ui(ui_node : UiNode, view: EasyModifiedViews, interpreter: DshellInterpreteur) -> EasyModifiedViews:
|
|
544
|
+
async def rebuild_ui(ui_node : UiNode, view: EasyModifiedViews, interpreter: DshellInterpreteur) -> EasyModifiedViews:
|
|
541
545
|
"""
|
|
542
546
|
Rebuilds a UI component from an existing EasyModifiedViews.
|
|
543
547
|
:param view:
|
|
544
548
|
:param interpreter:
|
|
545
549
|
:return:
|
|
546
550
|
"""
|
|
547
|
-
for args, args_button, code in build_ui_parameters(ui_node, interpreter):
|
|
551
|
+
async for args, args_button, code in build_ui_parameters(ui_node, interpreter):
|
|
548
552
|
try:
|
|
549
553
|
ui = view.get_ui(args_button['custom_id'])
|
|
550
554
|
except CustomIDNotFound:
|
|
@@ -600,12 +604,12 @@ async def ui_button_callback(button: Button, interaction: Interaction, data: dic
|
|
|
600
604
|
|
|
601
605
|
data.update({'code': code})
|
|
602
606
|
|
|
603
|
-
def build_permission(body: list[Token], interpreter: DshellInterpreteur) -> dict[
|
|
607
|
+
async def build_permission(body: list[Token], interpreter: DshellInterpreteur) -> dict[
|
|
604
608
|
Union[Member, Role], PermissionOverwrite]:
|
|
605
609
|
"""
|
|
606
610
|
Builds a dictionary of PermissionOverwrite objects from the command information.
|
|
607
611
|
"""
|
|
608
|
-
args_permissions: list[dict[str, list[Any]]] = regroupe_commandes(body, interpreter)
|
|
612
|
+
args_permissions: list[dict[str, list[Any]]] = await regroupe_commandes(body, interpreter)
|
|
609
613
|
permissions: dict[Union[Member, Role], PermissionOverwrite] = {}
|
|
610
614
|
|
|
611
615
|
for i in args_permissions:
|
|
@@ -5,7 +5,7 @@ with open("README.md", "r") as fh:
|
|
|
5
5
|
|
|
6
6
|
setup(
|
|
7
7
|
name="dshellInterpreter",
|
|
8
|
-
version="0.2.18.
|
|
8
|
+
version="0.2.18.7",
|
|
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-0.2.18.6 → dshellinterpreter-0.2.18.7}/Dshell/DISCORD_COMMANDS/__init__.py
RENAMED
|
File without changes
|
{dshellinterpreter-0.2.18.6 → dshellinterpreter-0.2.18.7}/Dshell/DISCORD_COMMANDS/dshell_channel.py
RENAMED
|
File without changes
|
|
File without changes
|
{dshellinterpreter-0.2.18.6 → dshellinterpreter-0.2.18.7}/Dshell/DISCORD_COMMANDS/dshell_member.py
RENAMED
|
File without changes
|
{dshellinterpreter-0.2.18.6 → dshellinterpreter-0.2.18.7}/Dshell/DISCORD_COMMANDS/dshell_message.py
RENAMED
|
File without changes
|
{dshellinterpreter-0.2.18.6 → dshellinterpreter-0.2.18.7}/Dshell/DISCORD_COMMANDS/dshell_pastbin.py
RENAMED
|
File without changes
|
{dshellinterpreter-0.2.18.6 → dshellinterpreter-0.2.18.7}/Dshell/DISCORD_COMMANDS/dshell_role.py
RENAMED
|
File without changes
|
{dshellinterpreter-0.2.18.6 → dshellinterpreter-0.2.18.7}/Dshell/DISCORD_COMMANDS/utils/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{dshellinterpreter-0.2.18.6 → dshellinterpreter-0.2.18.7}/Dshell/_DshellInterpreteur/__init__.py
RENAMED
|
File without changes
|
{dshellinterpreter-0.2.18.6 → dshellinterpreter-0.2.18.7}/Dshell/_DshellInterpreteur/errors.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{dshellinterpreter-0.2.18.6 → dshellinterpreter-0.2.18.7}/Dshell/_DshellParser/dshell_parser.py
RENAMED
|
File without changes
|
{dshellinterpreter-0.2.18.6 → dshellinterpreter-0.2.18.7}/Dshell/_DshellTokenizer/__init__.py
RENAMED
|
File without changes
|
{dshellinterpreter-0.2.18.6 → dshellinterpreter-0.2.18.7}/Dshell/_DshellTokenizer/dshell_keywords.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{dshellinterpreter-0.2.18.6 → dshellinterpreter-0.2.18.7}/dshellInterpreter.egg-info/SOURCES.txt
RENAMED
|
File without changes
|
|
File without changes
|
{dshellinterpreter-0.2.18.6 → dshellinterpreter-0.2.18.7}/dshellInterpreter.egg-info/requires.txt
RENAMED
|
File without changes
|
{dshellinterpreter-0.2.18.6 → dshellinterpreter-0.2.18.7}/dshellInterpreter.egg-info/top_level.txt
RENAMED
|
File without changes
|
|
File without changes
|