Skip to content

V4: Message builder - #2250

Open
quinchs wants to merge 2 commits into
4.0from
v4/message-builder
Open

quinchs wants to merge 2 commits into
4.0from
v4/message-builder

Conversation

@quinchs

@quinchs quinchs commented Apr 18, 2022

Copy link
Copy Markdown
Member

Summary

This PR adds a new builder called MessageBuilder which can build a Message that is used in SendMessageAsync functions.
The upsides to this style is we can merge SendFile and SendMessage functions as the library can determine whether or not the message contains files.
The builder also makes building reusable message templates easier.

Todo

  • IMessageChannel.SendMessageAsync
  • Interaction responses
  • Module base methods

@d4n3436

d4n3436 commented Apr 18, 2022

Copy link
Copy Markdown
Contributor

There should be some abstraction layer for MessageBuilder and Message like interfaces, so people can create their own custom builders.

@quinchs

quinchs commented Apr 18, 2022

Copy link
Copy Markdown
Member Author

We could just make stuff protected and virtual?

@csmir

csmir commented May 24, 2022

Copy link
Copy Markdown
Collaborator

@quinchs thoughts on allowing message parameters to be provided with a string operator?

    public class Message
    {
        private Message(string input)
        {

        }
        
        public static implicit operator Message(string input)
            => new Message(input);
    }

    internal class Example
    {
        public void ExampleMethod()
        {
            Send("test");

            void Send(Message message)
            {

            }
        }
    }

@csmir

csmir commented May 24, 2022

Copy link
Copy Markdown
Collaborator

Also with the same design as above, an embed could serve as operator for message:

        private Message(Embed input)
        {

        }

        public static implicit operator Message(Embed embed)
            => new Message(embed);

@csmir

csmir commented May 24, 2022

Copy link
Copy Markdown
Collaborator

With the mention of 'format', another idea to consider is a Format method, much like string.Format which runs over all entries of the builder looking for {} format entries and params object[] values as part of the Format method in these places. If not enough values are provided, escape and leave other format entries sit, or allow a bool to clear other format notations out of the string.

@quinchs
quinchs changed the base branch from dev to 4.0 May 31, 2022 14:24
@quinchs

quinchs commented May 31, 2022

Copy link
Copy Markdown
Member Author

@Rozen4334 lgtm

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

Status: Working on

Development

Successfully merging this pull request may close these issues.

3 participants