fixs IM messages not being send over to discord for outbound messages

This commit is contained in:
Madpeterz 2021-01-06 01:13:41 +00:00
parent c0d2203099
commit f097705b6a
6 changed files with 56 additions and 18 deletions

View file

@ -17,10 +17,10 @@ namespace BetterSecondBot.DiscordSupervisor
channelname = channelname.ToLowerInvariant(); channelname = channelname.ToLowerInvariant();
channelname = String.Concat(channelname.Where(char.IsLetterOrDigit)); 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) if (Channel != null)
{ {
return await Channel.SendMessageAsync(message); return await Channel.SendMessageAsync(message).ConfigureAwait(false);
} }
} }
return null; return null;

View file

@ -12,10 +12,22 @@ namespace BetterSecondBot.DiscordSupervisor
{ {
controler.Bot.MessageEvent += BotChatControlerHandler; controler.Bot.MessageEvent += BotChatControlerHandler;
controler.Bot.StatusMessageEvent += StatusMessageHandler; 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(); await DiscordRebuildChannels();
} }

View file

@ -184,6 +184,8 @@ namespace BetterSecondBot.DiscordSupervisor
} }
else else
{ {
await MarkMessage(message, "⏳").ConfigureAwait(true);
Thread.Sleep(200);
string[] bits = Chan.Topic.Split(':'); string[] bits = Chan.Topic.Split(':');
if (bits.Length >= 2) if (bits.Length >= 2)
{ {
@ -191,9 +193,9 @@ namespace BetterSecondBot.DiscordSupervisor
{ {
if (UUID.TryParse(bits[1], out UUID avatar) == true) if (UUID.TryParse(bits[1], out UUID avatar) == true)
{ {
IGuildUser user = (IGuildUser)message.Author; string content = message.Content;
controler.Bot.GetClient.Self.InstantMessage(avatar, message.Content); await message.DeleteAsync().ConfigureAwait(true);
await MarkMessage(message, "✅"); SendIM(avatar, content);
} }
} }
} }

View file

@ -12,13 +12,6 @@ namespace BetterSecondBot.DiscordSupervisor
if (HasBot() == true) if (HasBot() == true)
{ {
controler.Bot.SendIM(avatar, message); 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);
}
}
} }
} }
protected async Task DiscordGroupMessage(UUID group_uuid, string sender_name, string message) protected async Task DiscordGroupMessage(UUID group_uuid, string sender_name, string message)

View file

@ -77,8 +77,9 @@ namespace BSB.bottypes
} }
return commands.ToArray(); 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); AddToIMchat(avatar, GetClient.Self.Name, message);
Client.Self.InstantMessage(avatar, message); Client.Self.InstantMessage(avatar, message);
} }

View file

@ -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 class MessageEventArgs : EventArgs
{ {
public string message { get; } public string message { get; }
@ -110,10 +122,13 @@ namespace BSB.bottypes
private EventHandler<MessageEventArgs> _MessageEvent; private EventHandler<MessageEventArgs> _MessageEvent;
private EventHandler<StatusMessageEvent> _StatusMessageEvent; private EventHandler<StatusMessageEvent> _StatusMessageEvent;
private EventHandler<GroupEventArgs> _GroupsEvent; private EventHandler<GroupEventArgs> _GroupsEvent;
private EventHandler<ImSendArgs> _SendImEvent;
private readonly object _MessageEventLock = new object(); private readonly object _MessageEventLock = new object();
private readonly object _StatusMessageEventlock = new object(); private readonly object _StatusMessageEventlock = new object();
private readonly object _GroupsEventLock = new object(); private readonly object _GroupsEventLock = new object();
private readonly object _SendImEventLock = new object();
public event EventHandler<MessageEventArgs> MessageEvent public event EventHandler<MessageEventArgs> MessageEvent
{ {
@ -130,7 +145,17 @@ namespace BSB.bottypes
add { lock (_GroupsEventLock) { _GroupsEvent += value; } } add { lock (_GroupsEventLock) { _GroupsEvent += value; } }
remove { lock (_GroupsEventLock) { _GroupsEvent -= value; } } remove { lock (_GroupsEventLock) { _GroupsEvent -= value; } }
} }
public event EventHandler<ImSendArgs> SendImEvent
{
add { lock (_SendImEventLock) { _SendImEvent += value; } }
remove { lock (_SendImEventLock) { _SendImEvent -= value; } }
}
protected void On_SendImEvent(ImSendArgs e)
{
EventHandler<ImSendArgs> handler = _SendImEvent;
handler?.Invoke(this, e);
}
protected void On_MessageEvent(MessageEventArgs e) protected void On_MessageEvent(MessageEventArgs e)
{ {
EventHandler<MessageEventArgs> handler = _MessageEvent; EventHandler<MessageEventArgs> handler = _MessageEvent;
@ -149,6 +174,11 @@ namespace BSB.bottypes
handler?.Invoke(this, e); 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) 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) if (_MessageEvent != null)