Allow mentioning multiple discord users in a matrix message
This commit is contained in:
parent
f507f8f4e8
commit
f03b5167b4
1 changed files with 18 additions and 24 deletions
42
main.py
42
main.py
|
@ -51,7 +51,7 @@ async def on_message(message):
|
||||||
|
|
||||||
# Replace mention/emote IDs with names
|
# Replace mention/emote IDs with names
|
||||||
content = await process(message.content, "emote_")
|
content = await process(message.content, "emote_")
|
||||||
content = await process(content, "mention")
|
content = await process(content, "mention_")
|
||||||
|
|
||||||
content = f"<{message.author.name}> {content}"
|
content = f"<{message.author.name}> {content}"
|
||||||
|
|
||||||
|
@ -95,8 +95,17 @@ async def process(message, category):
|
||||||
start_ = 2
|
start_ = 2
|
||||||
end = ">"
|
end = ">"
|
||||||
|
|
||||||
# Replace mentioned user IDs with names (Discord -> Matrix)
|
# Replace mentioned user names with IDs (Matrix -> Discord)
|
||||||
elif category == "mention":
|
elif category == "mention":
|
||||||
|
channel = await get_channel()
|
||||||
|
guild = channel.guild
|
||||||
|
|
||||||
|
start = "@"
|
||||||
|
start_ = 0
|
||||||
|
end = ""
|
||||||
|
|
||||||
|
# Replace mentioned user IDs with names (Discord -> Matrix)
|
||||||
|
elif category == "mention_":
|
||||||
start = "<@!"
|
start = "<@!"
|
||||||
start_ = 3
|
start_ = 3
|
||||||
end = ">"
|
end = ">"
|
||||||
|
@ -115,6 +124,12 @@ async def process(message, category):
|
||||||
message = message.replace(item, f":{emote_name}:")
|
message = message.replace(item, f":{emote_name}:")
|
||||||
|
|
||||||
elif category == "mention":
|
elif category == "mention":
|
||||||
|
user = item[1:]
|
||||||
|
|
||||||
|
for member in await guild.query_members(query=user):
|
||||||
|
message = message.replace(item, member.mention)
|
||||||
|
|
||||||
|
elif category == "mention_":
|
||||||
user = discord_client.get_user(int(item_))
|
user = discord_client.get_user(int(item_))
|
||||||
message = message.replace(item, f"@{user.name}")
|
message = message.replace(item, f"@{user.name}")
|
||||||
|
|
||||||
|
@ -137,22 +152,6 @@ async def webhook_send(author, avatar, message):
|
||||||
await hook.send(username=author, avatar_url=avatar, content=message)
|
await hook.send(username=author, avatar_url=avatar, content=message)
|
||||||
|
|
||||||
|
|
||||||
async def partial_mention(user):
|
|
||||||
channel = await get_channel()
|
|
||||||
|
|
||||||
# Get guild to parse member list
|
|
||||||
guild = channel.guild
|
|
||||||
|
|
||||||
# Remove "@"
|
|
||||||
user = user[1:]
|
|
||||||
|
|
||||||
for member in await guild.query_members(query=user):
|
|
||||||
user_mention = f"<@!{member.id}>"
|
|
||||||
return user_mention
|
|
||||||
|
|
||||||
return None
|
|
||||||
|
|
||||||
|
|
||||||
async def create_matrix_client():
|
async def create_matrix_client():
|
||||||
homeserver = config["homeserver"]
|
homeserver = config["homeserver"]
|
||||||
username = config["username"]
|
username = config["username"]
|
||||||
|
@ -216,12 +215,7 @@ async def message_callback(room, event):
|
||||||
message = message.replace("@here", "@\u200Bhere")
|
message = message.replace("@here", "@\u200Bhere")
|
||||||
|
|
||||||
# Replace partial mention of Discord user with ID
|
# Replace partial mention of Discord user with ID
|
||||||
if message.startswith("@"):
|
message = await process(message, "mention")
|
||||||
user = message.split()[0]
|
|
||||||
user_mention = await partial_mention(user)
|
|
||||||
|
|
||||||
if user_mention is not None:
|
|
||||||
message = message.replace(user, user_mention)
|
|
||||||
|
|
||||||
# Get attachments
|
# Get attachments
|
||||||
try:
|
try:
|
||||||
|
|
Loading…
Reference in a new issue