fix for Embeds & ChatBlobs
This commit is contained in:
@@ -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'),
|
||||
('#', ''),
|
||||
('<', '<'),
|
||||
('>', '>'),
|
||||
('</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",
|
||||
|
||||
@@ -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"
|
||||
|
||||
@@ -64,4 +64,4 @@ class ContractController(BaseModule):
|
||||
def row_formatter(self, entry, index, data):
|
||||
return f"{self.text.zfill(index, len(data))}. " \
|
||||
f"<white>{self.text.zfill(entry.contracts, data[0].contracts)}</white> " \
|
||||
f"<{entry.faction.lower()}>{entry.org_name}</{entry.faction.lower()}>\n"
|
||||
f"<{(entry.faction or 'unknown').lower()}>{entry.org_name}</{(entry.faction or 'unknown').lower()}>\n"
|
||||
|
||||
Reference in New Issue
Block a user