fix for Embeds & ChatBlobs

This commit is contained in:
2022-04-16 01:43:29 +02:00
parent 0612b078a4
commit b230660c2f
3 changed files with 25 additions and 11 deletions
@@ -57,7 +57,7 @@ class DiscordCommandHandler(BaseModule):
def send_response(self, ctx: Message, reply):
rsp = ""
embeds = []
embeds: Embed = None
if type(reply) == str:
reply = self.discord.text.format_message(reply)
rsp = f"> {self.parseDiscord(reply)}"
@@ -68,22 +68,34 @@ class DiscordCommandHandler(BaseModule):
reply, reply)
if type(reply) == ChatBlob:
if reply.embed:
embeds.append(Embed(title=self.parseDiscord(f"{reply.page_prefix} {reply.title} {reply.page_postfix}"),
embeds = Embed(title=self.parseDiscord(f"{reply.page_prefix} {reply.title} {reply.page_postfix}"),
color=0x00FF00,
description=self.parseDiscord(reply.msg).replace("\n> ", '\n')))
description=self.parseDiscord(reply.msg, blob=True))
else:
reply: ChatBlob
rsp = self.parseDiscord(reply.page_prefix) + "\n"
if not (self.discord.text.strip_html_tags(reply.msg) or reply.msg).startswith(reply.title):
rsp += f"**__{reply.title}__**\n"
rsp += "> " + self.parseDiscord(reply.msg)
rsp += self.parseDiscord(reply.msg, blob=True)
rsp += f"\n {self.parseDiscord(reply.page_postfix)}"
self.discord.relay_hub_service.send_message(f"Discord_({ctx.channel.name})",
DictObject({'char_id': 0, 'name': ctx.author.name,
'discord_handle':
f'{ctx.author.name}#{ctx.author.discriminator}'}),
reply, reply)
if embeds:
if len(embeds.description) > 4000:
body = self.discord.text.split_by_separators(embeds.description, 4000, 10)
tmp1 = embeds
embeds = []
for x in enumerate(body):
tmp = tmp1.copy()
tmp.description = body[x]
tmp.title += f"*Page ({x}/{len(body)}*"
embeds.append(tmp)
else:
embeds = [embeds]
if len(rsp) > 2000:
rsp = self.discord.text.split_by_separators(rsp, 2000)
for page in rsp:
@@ -91,7 +103,7 @@ class DiscordCommandHandler(BaseModule):
else:
self.discord.client.loop.create_task(ctx.reply(rsp, embeds=embeds))
def parseDiscord(self, ctx: str):
def parseDiscord(self, ctx: str, blob=False):
proficon = {1: "sold", 2: "ma", 3: "eng", 4: "fixer", 5: "agent", 6: "adv", 7: "trad", 8: "crat", 9: "enf",
10: "doc", 11: "nt", 12: "mp", 14: "keep", 15: "shade"}
m = re.findall(r"<img src='tdb://id:GFX_GUI_ICON_PROFESSION_(\d+)'>", ctx)
@@ -101,7 +113,7 @@ class DiscordCommandHandler(BaseModule):
for x in ["`", ' *', ' _', ' |']:
ctx = ctx.replace(x, f' \\{x.strip()}')
for pattern, sub in [(r"(<br>|\n|</br>)", r"\n> "),
for pattern, sub in [(r"(<br>|\n|</br>)", r"\n"),
(r"<highlight>(.*?)</highlight>", r"**\1**"),
(r"<title>(.*?)</title>", r"**__\1__**"),
(r"<header>(.*?)</header>", r"**__\1__**"),
@@ -110,22 +122,24 @@ class DiscordCommandHandler(BaseModule):
(r"<font color=('*?).+?\1>(.*?)</font>", r'\2'),
(r"<myname>", self.bot.get_char_name()),
(r"<symbol>", self.discord.setting_service.get_value("symbol")),
(r"<a href=(.*?)itemref://\d+/\d+/\d+\1>(.+?)<\/a>", r"`\2`"),
# (r"<a href=(.*?)itemref://\d+/\d+/\d+\1>(.+?)<\/a>", r"`\2`"),
(r"<a href=(.*?)itemref://(\d+)/\d+/(\d+)\1>(.+?)<\/a>", r"[\4](https://aoitems.com/item\/\2\/\3/)" if blob else r"`\4`"),
(r"<a href=(.*?)itemid://(\d+)/(\d+)\1>(.+?)<\/a>", r"[\4](https://aoitems.com/item\/\2\/\3/)" if blob else r"`\4`"),
(r"<(.+?)>\s*?<\1>", ''),
(r"<pagebreak>", ''),
(r"<a.+?href=\'.*?\'>(.*?)</a>", r'`\1`'),
(r"<clan>(.*?)</clan>", r":yellow_circle: \1"),
(r"<omni>(.*?)</omni>", r":blue_circle: \1"),
(r"<unknown>(.*?)</unknown>", r":red_circle: \1"),
(r"<neutral>(.*?)</neutral>", r":white_circle: \1"),
(r"<tab>", "\t"),
(r"<img src=(.?)rdb://\d+\1>", ''),
(r"\n\n<img src=(.?)rdb://\d+\1>", ''),
(r"<a href=skillid://\d+>(.+?)</a>", r'\1'),
('#', ''),
('&lt;', '<'),
('&gt;', '>'),
('</font>', '')]:
ctx = re.sub(pattern, sub, ctx)
cnt = 1
while cnt > 0:
ctx, cnt = re.subn(r"<(black|white|yellow|blue|green|red|orange|grey|cyan|violet)>(.*?|\d+?)</\1>", r"\2",
+1 -1
View File
@@ -185,7 +185,7 @@ class DiscordController:
if msg.embed:
msg: ChatBlob
blob = Embed(title=self.cmd.parseDiscord(f"{msg.page_prefix} {msg.title} {msg.page_postfix}"),
color=0x00FF00, description=self.cmd.parseDiscord(msg.msg).replace("\n> ", '\n'))
color=0x00FF00, description=self.cmd.parseDiscord(msg.msg, blob=True).replace("\n> ", '\n'))
asyncio.run_coroutine_threadsafe(ch.send("", delete_after=del_after, embed=blob), self.loop)
return
rsp = self.cmd.parseDiscord(ctx.formatted_message.page_prefix) + "\n"