using EllieBot.Common.ModuleBehaviors; namespace EllieBot.Modules.Help.Services; public class HelpService : IExecNoCommand, IEService { private readonly BotConfigService _bss; private readonly IReplacementService _rs; private readonly IMessageSenderService _sender; public HelpService(BotConfigService bss, IReplacementService repSvc, IMessageSenderService sender) { _bss = bss; _rs = repSvc; _sender = sender; } public async Task ExecOnNoCommandAsync(IGuild? guild, IUserMessage msg) { var settings = _bss.Data; if (guild is null) { if (string.IsNullOrWhiteSpace(settings.DmHelpText) || settings.DmHelpText == "-") return; // only send dm help text if it contains one of the keywords, if they're specified // if they're not, then reply to every DM if (settings.DmHelpTextKeywords is not null && !settings.DmHelpTextKeywords.Any(k => msg.Content.Contains(k))) { return; } var repCtx = new ReplacementContext(guild: guild, channel: msg.Channel, user: msg.Author) .WithOverride("%prefix%", () => _bss.Data.Prefix) .WithOverride("%bot.prefix%", () => _bss.Data.Prefix); var text = SmartText.CreateFrom(settings.DmHelpText); text = await _rs.ReplaceAsync(text, repCtx); await _sender.Response(msg.Channel).Text(text).SendAsync(); } } }