Skip to content

Commit

Permalink
Adde #deleteIn, #reply to $sendMessage, fix commands handlering
Browse files Browse the repository at this point in the history
  • Loading branch information
MZshnik committed Jul 13, 2024
1 parent 842d81d commit adbe809
Show file tree
Hide file tree
Showing 4 changed files with 107 additions and 21 deletions.
3 changes: 2 additions & 1 deletion src/MZscript/Functions/Info/bot_info.py
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,8 @@ async def func_botinfo(self, ctx: disnake.Message, args: str):
"id": info.id,
"owner": info.owner.id,
"guilds": len(self.bot.guilds),
"users": len([j for i in self.bot.guilds for j in i.members])
"users": len([j for i in self.bot.guilds for j in i.members]),
"ping": int(self.bot.latency * 1000)
}

return str(params[args_list[0]])
Expand Down
11 changes: 3 additions & 8 deletions src/MZscript/Functions/Message/edit_message.py
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ def __init__(self, handler):

async def func_editmessage(self, ctx, args: str):
"""
`$editMessage[(channel;message;content;title;description;footer;footer icon;color;thumbnail;image;author;author url;author icon;return id)]`
`$editMessage[(channel;message;content;title;description;footer;footer icon;color;thumbnail;image;author;author url;author icon)]`
### Example:
`$editMessage[hello]`
### Example 2:
Expand Down Expand Up @@ -61,7 +61,7 @@ async def func_editmessage(self, ctx, args: str):
view = disnake.ui.View(timeout=None)

async def add_button(entry: str):
args_splitted = await self.get_args(entry, ctx)
args_splitted = await self.get_args(entry)
style = args_splitted[0]
label = args_splitted[1]
disabled = args_splitted[2]
Expand Down Expand Up @@ -225,11 +225,8 @@ async def add_reaction(entry: str):
if len(args_list) > 12 and len(args_list[12]) > 0:
icon_url = args_list[12]
embed.set_author(name=args_list[10], url=url, icon_url=icon_url)
return_id = False
if len(args_list) > 13 and len(args_list[13]) > 0:
return_id = True

if not embed.description:
if len(embed.to_dict()) < 2:
embed = None
try:
if not isinstance(ctx, disnake.AppCmdInter):
Expand All @@ -248,8 +245,6 @@ async def add_reaction(entry: str):
if isAddReaction:
for i in reactions:
await message.add_reaction(i)
if return_id:
return message.id

def setup(handler):
return Functions(handler)
112 changes: 101 additions & 11 deletions src/MZscript/Functions/Message/send_message.py
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ def __init__(self, handler):

async def func_sendmessage(self, ctx: disnake.Message, args: str):
"""
`$sendMessage[(channel;content;title;description;footer;footer icon;color;thumbnail;image;author;author url;author icon;return id)]`
`$sendMessage[(channel;content;title;description;footer;footer icon;color;thumbnail;image;author;author url;author icon;return id or is ephemeral)]`
### Example:
`$sendMessage[hello]`
### Example 2:
Expand All @@ -36,6 +36,7 @@ async def func_sendmessage(self, ctx: disnake.Message, args: str):
args_list.insert(0, channel)
else:
args_list.insert(0, channel)

embed = disnake.Embed()
view = disnake.ui.View(timeout=None)

Expand Down Expand Up @@ -152,9 +153,15 @@ def __init__(self):
view.add_item(NewMenu())

async def add_field(entry: str):
args_splitted = await self.get_args(entry, ctx)
args_splitted = await self.get_args(entry)
if len(args_splitted) < 2:
raise ValueError("$sendMessage: #addField: Name and value of field are required.")
error_msg = "$sendMessage: #addField: Name and value of field are required."
if self.handler.debug_console:
raise ValueError(error_msg)
else:
await ctx.channel.send(error_msg)
return True

inline = False
if len(args_splitted) > 2:
inline = args_splitted[2].lower() == "true"
Expand All @@ -167,11 +174,94 @@ async def add_reaction(entry: str):
isAddReaction = True
reactions.append(entry)

is_reply = None
async def reply_to(entry: str):
args_splitted = await self.get_args(entry)
if len(args_splitted) > 2:
error_msg = "$sendMessage: #reply: Too many args provided."
if self.handler.debug_console:
raise ValueError(error_msg)
else:
await ctx.channel.send(error_msg)
return True

channel = ctx.channel
if args_list[0].isdigit() and len(args_list) > 2:
channel = self.bot.get_channel(int(args_list[0]))
if not channel:
channel = await self.bot.fetch_channel(int(args_list[0]))
if not channel:
channel = ctx.channel
args_list.insert(0, channel)
else:
args_list.insert(0, channel)

message = None
error_msg = f"$sendMessage: #reply: Cannot find message \"{args_list[1]}\""
try:
message = self.bot.get_message(int(args_list[1]))
if not message:
message = await channel.fetch_message(int(args_list[1]))
if not message:
if self.handler.debug_console:
raise SyntaxError(error_msg)
else:
await ctx.channel.send(error_msg)
return True
except:
if self.handler.debug_console:
raise SyntaxError(error_msg)
else:
await ctx.channel.send(error_msg)
return True

nonlocal is_reply
is_reply = message

is_delete = None
async def delete_in(entry: str):
args_splitted = await self.get_args(entry)
if len(args_splitted) > 2 or len(args_splitted) == 0:
error_msg = "$sendMessage: #вудуеу: Too many args provided."
if self.handler.debug_console:
raise ValueError(error_msg)
else:
await ctx.channel.send(error_msg)
return True

is_float = False
try:
float(args_list[0])
is_float = True
except:
pass

if not args_list[0].isdigit() and not is_float:
error_msg = f"$sendMessage: #deleteIn: First argument most be integer: \"{args_list[0]}\""
if self.handler.debug_console:
raise ValueError(error_msg)
await ctx.channel.send(error_msg)
return True

if len(args_list) > 1:
if args_list[1] not in ['s', 'm', 'h', 'd']:
error_msg = f"$sendMessage: #deleteIn: Unsupported time format \"{args_list[1]}\". Select: s, m, h or d"
if self.handler.debug_console:
raise ValueError(error_msg)
await ctx.channel.send(error_msg)
return True
else:
args_list.append('s')
nonlocal is_delete
is_delete = int(args_list[0]) * {'s': 1, 'm': 60, 'h': 60*60, 'd': 60*60*24}[args_list[1]]

tag_funcs = {
"#addfield": add_field,
"#addbutton": add_button,
"#addmenu": add_menu,
"#addreaction": add_reaction
"#addreaction": add_reaction,
"#reply": reply_to,
"#deletein": delete_in
}
await self.exec_tags(args_list, tag_funcs)
content = None
Expand Down Expand Up @@ -204,17 +294,17 @@ async def add_reaction(entry: str):
if len(args_list) > 12 and len(args_list[12]) > 0:
return_id = True

if not embed.description:
if len(embed.to_dict()) < 2:
embed = None
message = None
try:
if not isinstance(ctx, disnake.AppCmdInter) or channel != ctx.channel:
message = await channel.send(content=content, embed=embed, view=view)
if is_reply:
message = await is_reply.reply(content=content, embed=embed, view=view)
else:
if embed:
message = await ctx.send(content=content, embed=embed, view=view)
if isinstance(ctx, disnake.AppCmdInter) and return_id:
message = await disnake.AppCmdInter.send(content=content, embed=embed, view=view, ephemeral=True, delete_after=is_delete)
else:
message = await ctx.send(content=content, view=view)
message = await channel.send(content=content, embed=embed, view=view, delete_after=is_delete)
except disnake.errors.HTTPException as e:
if self.handler.debug_console:
print(f"$sendMessage: {e.text}")
Expand All @@ -224,7 +314,7 @@ async def add_reaction(entry: str):
if isAddReaction:
for i in reactions:
await message.add_reaction(i)
if return_id:
if return_id and not isinstance(ctx, disnake.AppCmdInter):
return str(message.id)

def setup(handler):
Expand Down
2 changes: 1 addition & 1 deletion src/MZscript/main.py
Original file line number Diff line number Diff line change
Expand Up @@ -86,7 +86,7 @@ async def run_code(self, code: str, ctx: disnake.Message = None) -> str:
### Returns:
`str`: result of executed functions
"""
await self.funcs.is_have_functions(code)
await self.funcs.is_have_functions(code, ctx)

def add_command(self, name: str, code: str):
"""
Expand Down

0 comments on commit adbe809

Please sign in to comment.