mirror of
				https://gitlab.com/Kwoth/nadekobot.git
				synced 2025-11-03 16:24:27 -05:00 
			
		
		
		
	- .say now uses new SmartText instead of CREmbed
- Added IMessageChannel extensions for sending smarttext - Added implicit operator from string to smarttext (which just creates smartplaintext instance)
This commit is contained in:
		@@ -34,6 +34,58 @@ namespace NadekoBot.Common.Replacements
 | 
			
		||||
            return input;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public SmartText Replace(SmartText data)
 | 
			
		||||
            => data switch
 | 
			
		||||
            {
 | 
			
		||||
                SmartEmbedText embedData => Replace(embedData),
 | 
			
		||||
                SmartPlainText plain => Replace(plain),
 | 
			
		||||
                _ => throw new ArgumentOutOfRangeException(nameof(data), "Unsupported argument type")
 | 
			
		||||
            };
 | 
			
		||||
 | 
			
		||||
        public SmartPlainText Replace(SmartPlainText plainText)
 | 
			
		||||
            => Replace(plainText.Text);
 | 
			
		||||
 | 
			
		||||
        public SmartEmbedText Replace(SmartEmbedText embedData)
 | 
			
		||||
        {
 | 
			
		||||
            var newEmbedData = new SmartEmbedText();
 | 
			
		||||
            newEmbedData.PlainText = Replace(embedData.PlainText);
 | 
			
		||||
            newEmbedData.Description = Replace(embedData.Description);
 | 
			
		||||
            newEmbedData.Title = Replace(embedData.Title);
 | 
			
		||||
            newEmbedData.Thumbnail = Replace(embedData.Thumbnail);
 | 
			
		||||
            newEmbedData.Image = Replace(embedData.Image);
 | 
			
		||||
            if (embedData.Author != null)
 | 
			
		||||
            {
 | 
			
		||||
                newEmbedData.Author = new SmartTextEmbedAuthor();
 | 
			
		||||
                newEmbedData.Author.Name = Replace(embedData.Author.Name);
 | 
			
		||||
                newEmbedData.Author.IconUrl = Replace(embedData.Author.IconUrl);
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            if (embedData.Fields != null)
 | 
			
		||||
            {
 | 
			
		||||
                var fields = new List<SmartTextEmbedField>();
 | 
			
		||||
                foreach (var f in embedData.Fields)
 | 
			
		||||
                {
 | 
			
		||||
                    var newF = new SmartTextEmbedField();
 | 
			
		||||
                    newF.Name = Replace(f.Name);
 | 
			
		||||
                    newF.Value = Replace(f.Value);
 | 
			
		||||
                    fields.Add(newF);
 | 
			
		||||
                }
 | 
			
		||||
 | 
			
		||||
                newEmbedData.Fields = fields.ToArray();
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            if (embedData.Footer != null)
 | 
			
		||||
            {
 | 
			
		||||
                newEmbedData.Footer = new SmartTextEmbedFooter();
 | 
			
		||||
                newEmbedData.Footer.Text = Replace(embedData.Footer.Text);
 | 
			
		||||
                newEmbedData.Footer.IconUrl = Replace(embedData.Footer.IconUrl);
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            newEmbedData.Color = embedData.Color;
 | 
			
		||||
 | 
			
		||||
            return newEmbedData;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public CREmbed Replace(CREmbed embedData)
 | 
			
		||||
        {
 | 
			
		||||
            embedData.PlainText = Replace(embedData.PlainText);
 | 
			
		||||
 
 | 
			
		||||
@@ -2,15 +2,17 @@
 | 
			
		||||
 | 
			
		||||
namespace NadekoBot
 | 
			
		||||
{
 | 
			
		||||
    // todo 3.3 check if saving embeds in db has IsEmbed field, to prevent rechecking and generating exceptions on every use
 | 
			
		||||
    public abstract class SmartText
 | 
			
		||||
    {
 | 
			
		||||
        public bool IsEmbed => this is SmartEmbedText;
 | 
			
		||||
        public bool IsPlainText => this is SmartPlainText;
 | 
			
		||||
 | 
			
		||||
        public static implicit operator SmartText(string input)
 | 
			
		||||
            => new SmartPlainText(input);
 | 
			
		||||
        
 | 
			
		||||
        public static SmartText CreateFrom(string input)
 | 
			
		||||
        {
 | 
			
		||||
            if (string.IsNullOrWhiteSpace(input) || !input.Trim().StartsWith("{"))
 | 
			
		||||
            if (string.IsNullOrWhiteSpace(input) || !input.TrimStart().StartsWith("{"))
 | 
			
		||||
            {
 | 
			
		||||
                return new SmartPlainText(input);
 | 
			
		||||
            }
 | 
			
		||||
 
 | 
			
		||||
@@ -13,4 +13,12 @@ namespace NadekoBot.Common.TypeReaders
 | 
			
		||||
            return Task.FromResult(TypeReaderResult.FromError(CommandError.ParseFailed, "Input is not a valid kwum"));
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public sealed class SmartTextTypeReader : NadekoTypeReader<SmartText>
 | 
			
		||||
    {
 | 
			
		||||
        public override Task<TypeReaderResult> ReadAsync(ICommandContext ctx, string input)
 | 
			
		||||
        {
 | 
			
		||||
            return Task.FromResult(TypeReaderResult.FromSuccess(SmartText.CreateFrom(input)));
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
		Reference in New Issue
	
	Block a user