server-master/srcs/_plugins/WingsEmu.Plugins.BasicImplementation/InterChannel/Event/InterChannelReceiveWhisperEventHandler.cs
2026-02-10 18:21:30 +01:00

46 lines
No EOL
2 KiB
C#

using System.Threading;
using System.Threading.Tasks;
using PhoenixLib.Events;
using PhoenixLib.MultiLanguage;
using WingsEmu.DTOs.Account;
using WingsEmu.Game._i18n;
using WingsEmu.Game.Extensions;
using WingsEmu.Game.InterChannel;
using WingsEmu.Packets.Enums.Chat;
namespace WingsEmu.Plugins.BasicImplementations.InterChannel.Event;
public class InterChannelReceiveWhisperEventHandler : IAsyncEventProcessor<InterChannelReceiveWhisperEvent>
{
private readonly IGameLanguageService _languageService;
public InterChannelReceiveWhisperEventHandler(IGameLanguageService languageService) => _languageService = languageService;
public async Task HandleAsync(InterChannelReceiveWhisperEvent e, CancellationToken cancellation)
{
if (e.Sender.PlayerEntity.WhisperBlocked && e.AuthorityType < AuthorityType.GameMaster)
{
await e.Sender.EmitEventAsync(new InterChannelSendChatMsgByCharIdEvent(e.SenderCharacterId, GameDialogKey.INFORMATION_CHATMESSAGE_USER_WHISPER_BLOCKED, ChatMessageColorType.Red));
return;
}
if (e.Sender.PlayerEntity.IsBlocking(e.SenderCharacterId) && e.AuthorityType < AuthorityType.GameMaster)
{
await e.Sender.EmitEventAsync(new InterChannelSendChatMsgByCharIdEvent(e.SenderCharacterId, GameDialogKey.BLACKLIST_INFO_BLOCKING, ChatMessageColorType.Red));
return;
}
e.Sender.ReceiveSpeakWhisper(e.SenderCharacterId, e.SenderNickname, AddChannelToMessage(e.Message, e.SenderChannelId, e.Sender.UserLanguage),
e.AuthorityType >= AuthorityType.GameMaster ? SpeakType.GameMaster : SpeakType.Player);
}
private string AddChannelToMessage(string message, int senderChannelId, RegionLanguageType userLanguage)
{
if (senderChannelId == -1)
{
return message;
}
return message + $" <{_languageService.GetLanguage(GameDialogKey.INFORMATION_CHANNEL, userLanguage)}: {senderChannelId.ToString()}>";
}
}