fix: catch some discord bot errors

This commit is contained in:
goat 2020-07-20 18:25:07 +02:00
parent f92a37fbf9
commit 64f07a8c02
3 changed files with 31 additions and 17 deletions

View file

@ -75,7 +75,7 @@ namespace Dalamud.Injector {
Thread.Sleep(1000); Thread.Sleep(1000);
#if DEBUG #if NO
// Inject exception handler // Inject exception handler
NativeInject(process); NativeInject(process);
#endif #endif

View file

@ -188,27 +188,35 @@ namespace Dalamud.DiscordBot {
string senderName; string senderName;
string senderWorld; string senderWorld;
if (playerLink == null) { if (this.dalamud.ClientState.LocalPlayer != null) {
// chat messages from the local player do not include a player link, and are just the raw name if (playerLink == null)
// but we should still track other instances to know if this is ever an issue otherwise
// Special case 2 - When the local player talks in party/alliance, the name comes through as raw text,
// but prefixed by their position number in the party (which for local player may always be 1)
if (sender.TextValue.EndsWith(this.dalamud.ClientState.LocalPlayer.Name))
{ {
senderName = this.dalamud.ClientState.LocalPlayer.Name; // chat messages from the local player do not include a player link, and are just the raw name
// but we should still track other instances to know if this is ever an issue otherwise
// Special case 2 - When the local player talks in party/alliance, the name comes through as raw text,
// but prefixed by their position number in the party (which for local player may always be 1)
if (sender.TextValue.EndsWith(this.dalamud.ClientState.LocalPlayer.Name))
{
senderName = this.dalamud.ClientState.LocalPlayer.Name;
}
else
{
Log.Error("playerLink was null. Sender: {0}", BitConverter.ToString(sender.Encode()));
senderName = wasOutgoingTell ? this.dalamud.ClientState.LocalPlayer.Name : sender.TextValue;
}
senderWorld = this.dalamud.ClientState.LocalPlayer.HomeWorld.GameData.Name;
} }
else else
{ {
Log.Error("playerLink was null. Sender: {0}", BitConverter.ToString(sender.Encode())); senderName = wasOutgoingTell ? this.dalamud.ClientState.LocalPlayer.Name : playerLink.PlayerName;
senderWorld = playerLink.World.Name;
senderName = wasOutgoingTell ? this.dalamud.ClientState.LocalPlayer.Name : sender.TextValue;
} }
senderWorld = this.dalamud.ClientState.LocalPlayer.HomeWorld.GameData.Name;
} else { } else {
senderName = wasOutgoingTell ? this.dalamud.ClientState.LocalPlayer.Name : playerLink.PlayerName; senderName = string.Empty;
senderWorld = playerLink.World.Name; senderWorld = string.Empty;
} }
var rawMessage = message.TextValue; var rawMessage = message.TextValue;

View file

@ -170,7 +170,13 @@ namespace Dalamud.Game {
var messageCopy = message; var messageCopy = message;
var senderCopy = sender; var senderCopy = sender;
Task.Run(() => this.dalamud.BotManager.ProcessChatMessage(type, messageCopy, senderCopy)); Task.Run(async () => {
try {
await this.dalamud.BotManager.ProcessChatMessage(type, messageCopy, senderCopy);
} catch (Exception ex) {
Log.Error(ex, "Could not process discord bot message.");
}
});
// Handle all of this with SeString some day // Handle all of this with SeString some day
/* /*