mirror of
https://github.com/osmarks/autobotrobot
synced 2025-02-12 06:40:10 +00:00
bridge attachments, other fixes
This commit is contained in:
parent
4700a2f389
commit
ba2ce97290
@ -4,6 +4,7 @@ import dataclasses
|
|||||||
import typing
|
import typing
|
||||||
import collections
|
import collections
|
||||||
import logging
|
import logging
|
||||||
|
import discord
|
||||||
|
|
||||||
import util
|
import util
|
||||||
|
|
||||||
@ -25,6 +26,7 @@ class Message:
|
|||||||
message: list[typing.Union[str, dict]]
|
message: list[typing.Union[str, dict]]
|
||||||
source: (str, any)
|
source: (str, any)
|
||||||
id: int
|
id: int
|
||||||
|
attachments: list[discord.Attachment]
|
||||||
|
|
||||||
evbus_messages = prometheus_client.Counter("abr_evbus_messages", "Messages processed by event bus", ["source_type"])
|
evbus_messages = prometheus_client.Counter("abr_evbus_messages", "Messages processed by event bus", ["source_type"])
|
||||||
evbus_messages_dropped = prometheus_client.Counter("abr_evbus_messages_dropped", "Messages received by event bus but dropped by rate limits", ["source_type"])
|
evbus_messages_dropped = prometheus_client.Counter("abr_evbus_messages_dropped", "Messages received by event bus but dropped by rate limits", ["source_type"])
|
||||||
|
@ -51,7 +51,7 @@ async def initialize():
|
|||||||
conn.nick(scramble(conn.get_nickname()))
|
conn.nick(scramble(conn.get_nickname()))
|
||||||
|
|
||||||
def pubmsg(conn, event):
|
def pubmsg(conn, event):
|
||||||
msg = eventbus.Message(eventbus.AuthorInfo(event.source.nick, str(event.source), None), [" ".join(event.arguments)], (util.config["irc"]["name"], event.target), util.random_id())
|
msg = eventbus.Message(eventbus.AuthorInfo(event.source.nick, str(event.source), None), [" ".join(event.arguments)], (util.config["irc"]["name"], event.target), util.random_id(), [])
|
||||||
asyncio.create_task(eventbus.push(msg))
|
asyncio.create_task(eventbus.push(msg))
|
||||||
|
|
||||||
async def on_bridge_message(channel_name, msg):
|
async def on_bridge_message(channel_name, msg):
|
||||||
@ -60,6 +60,8 @@ async def initialize():
|
|||||||
# ping fix - zero width space embedded in messages
|
# ping fix - zero width space embedded in messages
|
||||||
line = f"<{random_color(msg.author.id)}{msg.author.name[0]}\u200B{msg.author.name[1:]}{color_code('')}> " + render_formatting(msg.message)[:400]
|
line = f"<{random_color(msg.author.id)}{msg.author.name[0]}\u200B{msg.author.name[1:]}{color_code('')}> " + render_formatting(msg.message)[:400]
|
||||||
conn.privmsg(channel_name, line)
|
conn.privmsg(channel_name, line)
|
||||||
|
for at in msg.attachments:
|
||||||
|
conn.privmsg(channel_name, f"-> {at.filename}: {at.proxy_url}")
|
||||||
else:
|
else:
|
||||||
logging.warning("IRC channel %s not allowed", channel_name)
|
logging.warning("IRC channel %s not allowed", channel_name)
|
||||||
|
|
||||||
|
@ -86,7 +86,7 @@ def setup(bot):
|
|||||||
created_timestamp = datetime.utcfromtimestamp(created_timestamp).replace(tzinfo=timezone.utc)
|
created_timestamp = datetime.utcfromtimestamp(created_timestamp).replace(tzinfo=timezone.utc)
|
||||||
extra = json.loads(extra)
|
extra = json.loads(extra)
|
||||||
uid = extra["author_id"]
|
uid = extra["author_id"]
|
||||||
tz = await util.get_user_timezone(util.AltCtx(util.IDWrapper(uid), util.IDWrapper(None), bot))
|
tz = await util.get_user_timezone(util.AltCtx(util.IDWrapper(uid), util.IDWrapper(extra.get("guild_id")), bot))
|
||||||
print(created_timestamp, tz, created_timestamp.astimezone(tz))
|
print(created_timestamp, tz, created_timestamp.astimezone(tz))
|
||||||
created_time = util.format_time(created_timestamp.astimezone(tz))
|
created_time = util.format_time(created_timestamp.astimezone(tz))
|
||||||
text = f"<@{uid}> Reminder queued at {created_time}: {reminder_text}"
|
text = f"<@{uid}> Reminder queued at {created_time}: {reminder_text}"
|
||||||
|
@ -87,29 +87,34 @@ class Telephone(commands.Cog):
|
|||||||
self.webhooks[row["channel_id"]] = row["webhook"]
|
self.webhooks[row["channel_id"]] = row["webhook"]
|
||||||
logging.info("Loaded %d webhooks", len(rows))
|
logging.info("Loaded %d webhooks", len(rows))
|
||||||
|
|
||||||
async def on_bridge_message(self, channel_id, msg):
|
async def on_bridge_message(self, channel_id, msg: eventbus.Message):
|
||||||
channel = self.bot.get_channel(channel_id)
|
channel = self.bot.get_channel(channel_id)
|
||||||
if channel:
|
if channel:
|
||||||
webhook = self.webhooks.get(channel_id)
|
webhook = self.webhooks.get(channel_id)
|
||||||
if webhook:
|
attachments_text = "\n".join(f"{at.filename}: {at.proxy_url}" for at in msg.attachments)
|
||||||
try:
|
async def send_raw(text):
|
||||||
self.webhook_queue.put_nowait((webhook, render_formatting(channel, msg.message)[:2000], msg.author.name, msg.author.avatar_url))
|
if webhook:
|
||||||
except asyncio.QueueFull:
|
try:
|
||||||
text = f"<{msg.author.name}> {render_formatting(channel, msg.message)}"
|
self.webhook_queue.put_nowait((webhook, text, msg.author.name, msg.author.avatar_url))
|
||||||
|
except asyncio.QueueFull:
|
||||||
|
text = f"<{msg.author.name}> {text}"
|
||||||
|
await channel.send(text[:2000], allowed_mentions=discord.AllowedMentions(everyone=False, roles=False, users=False))
|
||||||
|
else:
|
||||||
|
text = f"<{msg.author.name}> {text}"
|
||||||
await channel.send(text[:2000], allowed_mentions=discord.AllowedMentions(everyone=False, roles=False, users=False))
|
await channel.send(text[:2000], allowed_mentions=discord.AllowedMentions(everyone=False, roles=False, users=False))
|
||||||
else:
|
await send_raw(render_formatting(channel, msg.message)[:2000])
|
||||||
text = f"<{msg.author.name}> {render_formatting(channel, msg.message)}"
|
if attachments_text: await send_raw(attachments_text)
|
||||||
await channel.send(text[:2000], allowed_mentions=discord.AllowedMentions(everyone=False, roles=False, users=False))
|
|
||||||
else:
|
else:
|
||||||
logging.warning("Channel %d not found", channel_id)
|
logging.warning("Channel %d not found", channel_id)
|
||||||
|
|
||||||
@commands.Cog.listener("on_message")
|
@commands.Cog.listener("on_message")
|
||||||
async def send_to_bridge(self, msg):
|
async def send_to_bridge(self, msg):
|
||||||
# discard webhooks and bridge messages (hackily, admittedly, not sure how else to do this)
|
# discard webhooks and bridge messages (hackily, admittedly, not sure how else to do this)
|
||||||
if msg.content == "": return
|
if msg.content == "" and len(msg.attachments) == 0: return
|
||||||
if (msg.author == self.bot.user and msg.content[0] == "<") or msg.author.discriminator == "0000": return
|
if (msg.author == self.bot.user and msg.content[0] == "<") or msg.author.discriminator == "0000": return
|
||||||
channel_id = msg.channel.id
|
channel_id = msg.channel.id
|
||||||
msg = eventbus.Message(eventbus.AuthorInfo(msg.author.name, msg.author.id, str(msg.author.avatar_url), msg.author.bot), parse_formatting(self.bot, msg.content), ("discord", channel_id), msg.id)
|
msg = eventbus.Message(eventbus.AuthorInfo(msg.author.name, msg.author.id, str(msg.author.avatar_url), msg.author.bot),
|
||||||
|
parse_formatting(self.bot, msg.content), ("discord", channel_id), msg.id, [ at for at in msg.attachments if not at.is_spoiler() ])
|
||||||
await eventbus.push(msg)
|
await eventbus.push(msg)
|
||||||
|
|
||||||
def cog_unload(self):
|
def cog_unload(self):
|
||||||
@ -136,7 +141,7 @@ When you want to end a call, use hangup.
|
|||||||
@telephone.command(brief="Link to other channels", help="""Connect to another channel on Discord or any supported bridges.
|
@telephone.command(brief="Link to other channels", help="""Connect to another channel on Discord or any supported bridges.
|
||||||
Virtual channels also exist.
|
Virtual channels also exist.
|
||||||
""")
|
""")
|
||||||
@commands.check(util.admin_check)
|
@commands.check(util.extpriv_check)
|
||||||
async def link(self, ctx, target_type, target_id, bidirectional: bool = True):
|
async def link(self, ctx, target_type, target_id, bidirectional: bool = True):
|
||||||
target_id = util.extract_codeblock(target_id)
|
target_id = util.extract_codeblock(target_id)
|
||||||
try:
|
try:
|
||||||
@ -147,7 +152,7 @@ When you want to end a call, use hangup.
|
|||||||
pass
|
pass
|
||||||
|
|
||||||
@telephone.command(brief="Undo link commands.")
|
@telephone.command(brief="Undo link commands.")
|
||||||
@commands.check(util.admin_check)
|
@commands.check(util.extpriv_check)
|
||||||
async def unlink(self, ctx, target_type, target_id, bidirectional: bool = True):
|
async def unlink(self, ctx, target_type, target_id, bidirectional: bool = True):
|
||||||
target_id = util.extract_codeblock(target_id)
|
target_id = util.extract_codeblock(target_id)
|
||||||
try:
|
try:
|
||||||
|
@ -255,6 +255,9 @@ async def server_mod_check(ctx):
|
|||||||
async def admin_check(ctx):
|
async def admin_check(ctx):
|
||||||
return await ctx.bot.is_owner(ctx.author)
|
return await ctx.bot.is_owner(ctx.author)
|
||||||
|
|
||||||
|
async def extpriv_check(ctx):
|
||||||
|
return await ctx.bot.is_owner(ctx.author) or ctx.author.id in config["extpriv_users"]
|
||||||
|
|
||||||
async def get_asset(bot: commands.Bot, identifier):
|
async def get_asset(bot: commands.Bot, identifier):
|
||||||
safe_ident = re.sub("[^A-Za-z0-9_.-]", "_", identifier)
|
safe_ident = re.sub("[^A-Za-z0-9_.-]", "_", identifier)
|
||||||
x = await bot.database.execute_fetchone("SELECT * FROM assets WHERE identifier = ?", (safe_ident,))
|
x = await bot.database.execute_fetchone("SELECT * FROM assets WHERE identifier = ?", (safe_ident,))
|
||||||
|
Loading…
x
Reference in New Issue
Block a user