From f097705b6a85943d163794cbc1d21015b264859f Mon Sep 17 00:00:00 2001 From: Madpeterz <57852827+Madpeterz@users.noreply.github.com> Date: Wed, 6 Jan 2021 01:13:41 +0000 Subject: [PATCH] fixs IM messages not being send over to discord for outbound messages --- CLI/DiscordSupervisor/ChannelControl.cs | 4 ++-- CLI/DiscordSupervisor/DiscordEvents.cs | 16 +++++++++++-- CLI/DiscordSupervisor/Inbound.cs | 10 ++++---- CLI/DiscordSupervisor/relay.cs | 9 +------ Core/bottypes/CommandsBot.cs | 3 ++- Core/bottypes/EventsBot.cs | 32 ++++++++++++++++++++++++- 6 files changed, 56 insertions(+), 18 deletions(-) diff --git a/CLI/DiscordSupervisor/ChannelControl.cs b/CLI/DiscordSupervisor/ChannelControl.cs index 9330e02..9ef3c63 100644 --- a/CLI/DiscordSupervisor/ChannelControl.cs +++ b/CLI/DiscordSupervisor/ChannelControl.cs @@ -17,10 +17,10 @@ namespace BetterSecondBot.DiscordSupervisor channelname = channelname.ToLowerInvariant(); channelname = String.Concat(channelname.Where(char.IsLetterOrDigit)); - ITextChannel Channel = await FindTextChannel(channelname, catmap[catmapid], sender_id, TopicType).ConfigureAwait(false); + ITextChannel Channel = await FindTextChannel(channelname, catmap[catmapid], sender_id, TopicType).ConfigureAwait(true); if (Channel != null) { - return await Channel.SendMessageAsync(message); + return await Channel.SendMessageAsync(message).ConfigureAwait(false); } } return null; diff --git a/CLI/DiscordSupervisor/DiscordEvents.cs b/CLI/DiscordSupervisor/DiscordEvents.cs index b8b36a7..eb8b961 100644 --- a/CLI/DiscordSupervisor/DiscordEvents.cs +++ b/CLI/DiscordSupervisor/DiscordEvents.cs @@ -12,10 +12,22 @@ namespace BetterSecondBot.DiscordSupervisor { controler.Bot.MessageEvent += BotChatControlerHandler; controler.Bot.StatusMessageEvent += StatusMessageHandler; - controler.Bot.GroupsReadyEvent += GroupsReady; + controler.Bot.GroupsReadyEvent += GroupsReadyHandler; + controler.Bot.SendImEvent += SendImHandler; } - protected async void GroupsReady(object sender, GroupEventArgs e) + protected void SendImHandler(object sender, ImSendArgs e) + { + if (controler.Bot.AvatarKey2Name.ContainsKey(e.avataruuid) == true) + { + if (DiscordClientConnected == true) + { + _ = SendMessageToChannelAsync(controler.Bot.AvatarKey2Name[e.avataruuid], "Bot/Script: " + e.message + "", "im", e.avataruuid, "IM").ConfigureAwait(false); + } + } + } + + protected async void GroupsReadyHandler(object sender, GroupEventArgs e) { await DiscordRebuildChannels(); } diff --git a/CLI/DiscordSupervisor/Inbound.cs b/CLI/DiscordSupervisor/Inbound.cs index 0a50453..d145dfb 100644 --- a/CLI/DiscordSupervisor/Inbound.cs +++ b/CLI/DiscordSupervisor/Inbound.cs @@ -184,16 +184,18 @@ namespace BetterSecondBot.DiscordSupervisor } else { + await MarkMessage(message, "⏳").ConfigureAwait(true); + Thread.Sleep(200); string[] bits = Chan.Topic.Split(':'); if (bits.Length >= 2) { if (bits[0] == "IM") { if (UUID.TryParse(bits[1], out UUID avatar) == true) - { - IGuildUser user = (IGuildUser)message.Author; - controler.Bot.GetClient.Self.InstantMessage(avatar, message.Content); - await MarkMessage(message, "✅"); + { + string content = message.Content; + await message.DeleteAsync().ConfigureAwait(true); + SendIM(avatar, content); } } } diff --git a/CLI/DiscordSupervisor/relay.cs b/CLI/DiscordSupervisor/relay.cs index 3ef95cc..df341ff 100644 --- a/CLI/DiscordSupervisor/relay.cs +++ b/CLI/DiscordSupervisor/relay.cs @@ -11,14 +11,7 @@ namespace BetterSecondBot.DiscordSupervisor { if (HasBot() == true) { - controler.Bot.SendIM(avatar, message); - if (controler.Bot.AvatarKey2Name.ContainsKey(avatar) == true) - { - if (DiscordClientConnected == true) - { - _ = SendMessageToChannelAsync(controler.Bot.AvatarKey2Name[avatar], "Bot/Script: " + message + "", "im", avatar, "IM").ConfigureAwait(false); - } - } + controler.Bot.SendIM(avatar, message); } } protected async Task DiscordGroupMessage(UUID group_uuid, string sender_name, string message) diff --git a/Core/bottypes/CommandsBot.cs b/Core/bottypes/CommandsBot.cs index 9581bd4..098d4d1 100644 --- a/Core/bottypes/CommandsBot.cs +++ b/Core/bottypes/CommandsBot.cs @@ -77,8 +77,9 @@ namespace BSB.bottypes } return commands.ToArray(); } - public virtual void SendIM(UUID avatar,string message) + public override void SendIM(UUID avatar,string message) { + base.SendIM(avatar, message); AddToIMchat(avatar, GetClient.Self.Name, message); Client.Self.InstantMessage(avatar, message); } diff --git a/Core/bottypes/EventsBot.cs b/Core/bottypes/EventsBot.cs index c0456d0..1fee607 100644 --- a/Core/bottypes/EventsBot.cs +++ b/Core/bottypes/EventsBot.cs @@ -81,6 +81,18 @@ namespace BSB.bottypes } } + public class ImSendArgs : EventArgs + { + public UUID avataruuid { get; } + public string message { get; } + + public ImSendArgs(UUID avataruuid, string message) + { + this.avataruuid = avataruuid; + this.message = message; + } + } + public class MessageEventArgs : EventArgs { public string message { get; } @@ -110,10 +122,13 @@ namespace BSB.bottypes private EventHandler _MessageEvent; private EventHandler _StatusMessageEvent; private EventHandler _GroupsEvent; + private EventHandler _SendImEvent; private readonly object _MessageEventLock = new object(); private readonly object _StatusMessageEventlock = new object(); private readonly object _GroupsEventLock = new object(); + private readonly object _SendImEventLock = new object(); + public event EventHandler MessageEvent { @@ -130,8 +145,18 @@ namespace BSB.bottypes add { lock (_GroupsEventLock) { _GroupsEvent += value; } } remove { lock (_GroupsEventLock) { _GroupsEvent -= value; } } } + public event EventHandler SendImEvent + { + add { lock (_SendImEventLock) { _SendImEvent += value; } } + remove { lock (_SendImEventLock) { _SendImEvent -= value; } } + } - protected void On_MessageEvent(MessageEventArgs e) + protected void On_SendImEvent(ImSendArgs e) + { + EventHandler handler = _SendImEvent; + handler?.Invoke(this, e); + } + protected void On_MessageEvent(MessageEventArgs e) { EventHandler handler = _MessageEvent; handler?.Invoke(this, e); @@ -149,6 +174,11 @@ namespace BSB.bottypes handler?.Invoke(this, e); } + public virtual void SendIM(UUID avatar, string message) + { + On_SendImEvent(new ImSendArgs(avatar, message)); + } + protected virtual void BotChatControler(string message, string sender_name, UUID sender_uuid, bool avatar, bool group, UUID group_uuid, bool localchat, bool fromme) { if (_MessageEvent != null)