part 3 of the response rework

This commit is contained in:
Kwoth
2024-04-29 21:03:40 +00:00
parent d28c7b500d
commit daa2177559
65 changed files with 508 additions and 625 deletions

View File

@@ -3,5 +3,8 @@
public interface IMessageSenderService
{
ResponseBuilder Response(IMessageChannel channel);
ResponseBuilder Response(ICommandContext hannel);
ResponseBuilder Response(ICommandContext ctx);
ResponseBuilder Response(IUser user);
ResponseBuilder Response(SocketMessageComponent smc);
}

View File

@@ -2,10 +2,6 @@
public static class MessageChannelExtensions
{
public static ResponseBuilder Response(this IMessageChannel channel, IBotStrings bs, IEmbedBuilderService ebs)
=> new ResponseBuilder(bs, ebs)
.Channel(channel);
// main overload that all other send methods reduce to
public static Task<IUserMessage> SendAsync(
this IMessageChannel channel,
@@ -92,7 +88,7 @@ public static class MessageChannelExtensions
this IMessageChannel ch,
EmbedBuilder? embed,
string plainText = "",
IReadOnlyCollection<IEmbedBuilder>? embeds = null,
IReadOnlyCollection<EmbedBuilder>? embeds = null,
NadekoInteraction? inter = null,
IUserMessage? replyTo = null)
=> ch.SendAsync(plainText,

View File

@@ -5,20 +5,27 @@ namespace NadekoBot.Extensions;
public sealed class MessageSenderService : IMessageSenderService, INService
{
private readonly IBotStrings _bs;
private readonly IEmbedBuilderService _ebs;
public MessageSenderService(IBotStrings bs, IEmbedBuilderService ebs)
public MessageSenderService(IBotStrings bs)
{
_bs = bs;
_ebs = ebs;
}
public ResponseBuilder Response(IMessageChannel channel)
=> new ResponseBuilder(_bs, _ebs)
=> new ResponseBuilder(_bs)
.Channel(channel);
public ResponseBuilder Response(ICommandContext ctx)
=> new ResponseBuilder(_bs, _ebs)
=> new ResponseBuilder(_bs)
.Context(ctx);
public ResponseBuilder Response(IUser user)
=> new ResponseBuilder(_bs)
.User(user);
// todo fix interactions
public ResponseBuilder Response(SocketMessageComponent smc)
=> new ResponseBuilder(_bs)
.Channel(smc.Channel);
}

View File

@@ -14,13 +14,14 @@ public sealed class ResponseBuilder
private object[] locParams = [];
private bool shouldReply = true;
private readonly IBotStrings _bs;
private readonly IEmbedBuilderService _ebs;
private EmbedBuilder? embedBuilder = null;
private NadekoInteraction? inter;
private Stream? fileStream = null;
private string? fileName = null;
public ResponseBuilder(IBotStrings bs, IEmbedBuilderService ebs)
public ResponseBuilder(IBotStrings bs)
{
_bs = bs;
_ebs = ebs;
}
private MessageReference? CreateMessageReference(IMessageChannel targetChannel)
@@ -43,8 +44,9 @@ public sealed class ResponseBuilder
failIfNotExists: false);
}
public async Task<IUserMessage> SendAsync()
public async Task<IUserMessage> SendAsync(bool ephemeral = false)
{
// todo use ephemeral in interactions
var targetChannel = InternalResolveChannel() ?? throw new ArgumentNullException(nameof(channel));
var msgReference = CreateMessageReference(targetChannel);
@@ -53,6 +55,15 @@ public sealed class ResponseBuilder
if (sanitizeMentions)
txt = txt?.SanitizeMentions(true);
if (this.fileStream is Stream stream)
return await targetChannel.SendFileAsync(stream,
filename: fileName,
txt,
embed: embed ?? embedBuilder?.Build(),
components: null,
allowedMentions: sanitizeMentions ? new(AllowedMentionTypes.Users) : AllowedMentions.All,
messageReference: msgReference);
return await targetChannel.SendMessageAsync(
txt,
embed: embed ?? embedBuilder?.Build(),
@@ -65,6 +76,7 @@ public sealed class ResponseBuilder
private ulong? InternalResolveGuildId(IMessageChannel? targetChannel)
=> ctx?.Guild?.Id ?? (targetChannel as ITextChannel)?.GuildId;
// todo not good, has to go to the user
private IMessageChannel? InternalResolveChannel()
=> channel ?? ctx?.Channel ?? msg?.Channel;
@@ -188,20 +200,14 @@ public sealed class ResponseBuilder
private IUser? InternalResolveUser()
=> ctx?.User ?? user ?? msg?.Author;
// todo embed colors
public ResponseBuilder Embed(EmbedBuilder eb)
{
embedBuilder = eb;
return this;
}
public ResponseBuilder Embed(Func<IEmbedBuilderService, EmbedBuilder> embedFactory)
{
// todo colors
this.embed = embedFactory(_ebs).Build();
return this;
}
public ResponseBuilder Channel(IMessageChannel channel)
{
this.channel = channel;
@@ -238,9 +244,10 @@ public sealed class ResponseBuilder
return this;
}
public ResponseBuilder Interaction(NadekoInteraction inter)
public ResponseBuilder Interaction(NadekoInteraction? interaction)
{
// todo implement
inter = interaction;
return this;
}
@@ -249,4 +256,11 @@ public sealed class ResponseBuilder
embeds = inputEmbeds;
return this;
}
public ResponseBuilder FileName(Stream fileStream, string fileName)
{
this.fileStream = fileStream;
this.fileName = fileName;
return this;
}
}