Skip to content
Snippets Groups Projects
Verified Commit 16cc72fd authored by Emilia's avatar Emilia
Browse files

Very basic reaction bridge (discord to lq)

LQ Does not have reactions yet so the bot just replies to the message that got a reaction
parent 9aeb2f4b
No related branches found
No related tags found
No related merge requests found
...@@ -122,6 +122,7 @@ public class QuarkcordPlugin : IPlugin ...@@ -122,6 +122,7 @@ public class QuarkcordPlugin : IPlugin
_client.MessageReceived += DiscordMessageReceived; _client.MessageReceived += DiscordMessageReceived;
_client.MessageUpdated += DiscordMessageUpdated; _client.MessageUpdated += DiscordMessageUpdated;
_client.MessageDeleted += DiscordMessageDeleted; _client.MessageDeleted += DiscordMessageDeleted;
_client.ReactionAdded += DiscordReactionAdded;
eventBus.Subscribe<MessageCreateEvent>(LqMessageReceived); eventBus.Subscribe<MessageCreateEvent>(LqMessageReceived);
eventBus.Subscribe<MessageDeleteEvent>(LqMessageDeleted); eventBus.Subscribe<MessageDeleteEvent>(LqMessageDeleted);
...@@ -208,6 +209,49 @@ public class QuarkcordPlugin : IPlugin ...@@ -208,6 +209,49 @@ public class QuarkcordPlugin : IPlugin
} }
} }
private async Task DiscordReactionAdded(Cacheable<IUserMessage, ulong> messageParam,
Cacheable<IMessageChannel, ulong> channelParam, SocketReaction reactionParam)
{
if (_bridgeChannels.All(bc => bc.DiscordId != channelParam.Id)) return;
var bridgeChannel = _bridgeChannels.Find(bc => bc.DiscordId == channelParam.Id);
var discordMessageId = messageParam.Id;
var messagePairCursor = await MessagePairs.FindAsync(m => m.DiscordId == discordMessageId);
var messagePair = await messagePairCursor.FirstOrDefaultAsync();
if (messagePair == null) return;
var message = await messageParam.DownloadAsync();
var specialAttributes = new JArray
{
new JObject
{
["type"] = "reply",
["replyTo"] = messagePair.LqId.ToString()
}
};
_eventBus.Publish(new CreateMessageMessage
{
Message = new LqMessage
{
VirtualAuthors = [_user!],
ChannelId = bridgeChannel!.LqId,
Id = ObjectId.GenerateNewId(),
AuthorId = _user!.Id,
Content = $"{(reactionParam.User.GetValueOrDefault() as SocketGuildUser)?.Nickname
?? reactionParam.User.GetValueOrDefault().GlobalName
?? reactionParam.User.GetValueOrDefault().Username
?? "Someone"} reacted with {reactionParam.Emote}",
UserAgent = "Quarkcord",
Timestamp = DateTimeOffset.Now.ToUnixTimeMilliseconds(),
Edited = false,
Attachments = [],
SpecialAttributes = specialAttributes
}
});
}
private async Task DiscordMessageDeleted(Cacheable<IMessage, ulong> messageParam, Cacheable<IMessageChannel, ulong> channelParam) private async Task DiscordMessageDeleted(Cacheable<IMessage, ulong> messageParam, Cacheable<IMessageChannel, ulong> channelParam)
{ {
if (_bridgeChannels.All(bc => bc.DiscordId != channelParam.Id)) return; if (_bridgeChannels.All(bc => bc.DiscordId != channelParam.Id)) return;
...@@ -232,7 +276,7 @@ public class QuarkcordPlugin : IPlugin ...@@ -232,7 +276,7 @@ public class QuarkcordPlugin : IPlugin
new JObject new JObject
{ {
["type"] = "botMessage", ["type"] = "botMessage",
["username"] = (message.Author as SocketGuildUser)?.Nickname ?? message.Author.GlobalName, ["username"] = (message.Author as SocketGuildUser)?.Nickname ?? message.Author.GlobalName ?? message.Author.Username,
["avatarUri"] = $"{_networkInformation!.CdnBaseUrl}/external/{HttpUtility.UrlEncode(message.Author.GetAvatarUrl())}" ["avatarUri"] = $"{_networkInformation!.CdnBaseUrl}/external/{HttpUtility.UrlEncode(message.Author.GetAvatarUrl())}"
} }
}; };
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment