Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Road Map for v0.6.0 #428

Closed
18 tasks done
Lakelezz opened this issue Nov 8, 2018 · 7 comments
Closed
18 tasks done

Road Map for v0.6.0 #428

Lakelezz opened this issue Nov 8, 2018 · 7 comments
Labels
enhancement An improvement to Serenity. opinions wanted Discussion or solution to a problem requested.
Milestone

Comments

@Lakelezz
Copy link
Contributor

Lakelezz commented Nov 8, 2018

This road map organises features that we consider or want to ship with v0.6.0. It's an incomplete collection continuously striving to be updated.

  • Proposed are features that could qualify for v0.6.0 but are yet neither confirmed nor implemented.
  • Accepted & WIP are features that will ship with v0.6.0 but are still being implemented.
  • Implemented are features that are ready to ship and merged (or waiting to be) into v0.6.0.

Serenity v0.6.0-rc.0, v0.6.0-rc.1, v0.6.0-rc.2, v0.6.0-rc.2.1 got released!
v0.6.0-rc.2.1 fixes a fatal bug in v0.6.0-rc.2 related to the attribute driven framework.
v0.6.0-rc.2.1.

v0.6.0 has been released.

Current road map stage:

Updating Rust Code

  • As of Rust 1.26.0, pattern matching automatically applies dereferencing, thus we can update our matchs to accept T instead of &T. This is fixed with Update to Rust 2018 #445.
  • As of Rust 1.31.0 quite a few changes stabilised. These were adopted with Update to Rust 2018 #445.
  • Future-proofing enums and structs to be exhaustively unmatchable and thus gain changeability of public fields without causing a breaking change.
  • Consider all Clippy-lints, this also includes reconsidering currently allowed lints. This was done in Conform to Clippy #531.

Accepted & WIP

Implemented

  • Support multiple dynamic Prefixes,

    • About: Adds the possibility to define multiple prefixes for a specific runtime determined circumstance (e.g. a specific guild).
    • Breaking: Changes types on public fields and signature of dynamic_prefix, which might be renamed to dynamic_prefixes or will coexist.
  • Implementation: Rewrite the framework to attributes (WIP) #458

  • Proc-Macro Commands/Framework,

    • About: Fundamentally changes how commands are built by using attributes above functions.
    • Breaking: Builders to create commands will no longer exist.
    • How to upgrade: Port all your commands to attribute-driven commands.
    • Implementation: Rewrite the framework to attributes (WIP) #458
  • Nested Groups,

  • Support sub-groups in the Help-system,

    • About: New command-groups can have sub-groups, which is another group inside a group. This adds support for the help-system to display these in a fancy way.
    • Breaking: Can change output-length of help-command and thus may exceed Discord's limit.
    • Implementation: Rename sub to sub_groups. #539
  • Switch to audiopus,

    • About: Switch to audiopus to offer Windows' voice-support and update outdated Opus version.
    • Breaking: OpusError will now yield a different error-enum from audiopus.
    • Implementation: Switch to audiopus #522
  • Support Rustls and OpenSSL,

    • About: Switch to Rustls by default and offer a feature to depend on OpenSSL instead.
    • Implementation: Rustls support #457
  • Plain-help gets little facelift,

    • About: Readability is improved by underlining topic.
    • Breaking: Underlining increases characters used and may exceed maximum by Discord.
    • How to upgrade: If your help is close to maximum and would exceed, shorten amount of used characters.
    • Implementation: Underline command name and "Commands" in plain help #403
  • Slow Mode,

    • About: Allows checking whether current channel is using a per user ratelimit and to set it.
    • Breaking: Both with_embeds and plain need to change their signature to accept a HashSet with related owners.
    • How to upgrade: Add field slow_mode_rate for manually constructed GuildChannels.
    • Implementation: Add Slow Mode Rate #439
  • Fix OpenSSL,

  • Builders borrow themselves via &mut self,

  • Use RwLock for ShareMap instead of Mutex,

    • About: In some cases reading from the ShareMap is required only, however Mutex disallows multiple readers.
    • Breaking: lock() is not implemented on RwLock.
    • How to upgrade: All lock()-calls on the ShareMap need to be changed to either read() or write().
    • Implementation: Change Context's lock to ShareMap from Mutex to RwLock #453
  • Remove global Cache and HTTP,

    • About: In v0.5.x both can be freely accessed from everywhere. In v0.6.x, these two would be passed around - maybe passed inside Context.
    • Breaking: E.g. ChannelId(u64).say(impl Display) will no longer work, every portion relying on HTTP and Cache as global will break.
    • Implementation: Remove global Cache #448 and Remove global HTTP #456
  • Named Checks returning reasoned Errors

    • About: 0.5.x-checks were simply returning a bool to express success and failure, the new checks can store a possible name, help-display-options, help-bypass-option, and return CheckResult to provide an expressive handling of failures (e.g. to log or inform the user).
    • Breaking: The signature of the check function changed.
    • How to upgrade: Make checks return CheckResult instead of bool; they implement From<bool> as well if you do not want to use CheckResult.
    • Implementation: Add new Check System #479
  • Update Help-System

Bugs to fix before RC:

Declined

  • Async serenity

    • Reason: We decided to await async keywords on stable Rust, which won't happen until later this year.
  • ETF Gateway Support

  • Rework Bucket/Custom Command Rate Limiting,

    • About: Instead of having a simple and complex bucket we should simplify this to one bucket and extend the functionality as well to further tune and adjust.
    • Breaking: Old buckets will no longer exist.
    • Reason: To wrap up v0.6.0's already quite big release, we decided to schedule it for the next fitting release.
@arqunis arqunis added enhancement An improvement to Serenity. opinions wanted Discussion or solution to a problem requested. labels Nov 8, 2018
@iddm
Copy link
Contributor

iddm commented Nov 9, 2018

Personally, I have made my own stuff for creating extensions for my serenity bot. It allows to dynamically insert or remove extensions (which provide different functionality, commands, and so on) and work within a single bot. It would be nice to provide extensibility in the upstream itself. Though, I guess, this will not land in 0.6 as I think you want to release it quite soon, don't you?

@Lakelezz
Copy link
Contributor Author

Lakelezz commented Nov 9, 2018

It would be great if we can take a look at it, please share example code or link to your implementation on your fork : )

@iddm
Copy link
Contributor

iddm commented Nov 9, 2018

It would be great if we can take a look at it, please share example code or link to your implementation on your fork : )

Oh, it is not in a fork, it is made on top of serenity's public interface :) And it hasn't been finished yet, I am porting it from my old project (which is private) :)

Currently, there is only a simple "extension" trait and a few impls for it which describe it (name, commands, behavior, and so on) and may be easily plugged in (but statically yet) to a serenity instance.

@fenhl
Copy link
Contributor

fenhl commented Mar 6, 2019

I would like to propose modularized event handlers (#488) as a feature to be included in 0.6.

@Lakelezz
Copy link
Contributor Author

Lakelezz commented Mar 29, 2019

Thanks for all the suggestions - ranging from this issue to our Discord - we decided that to wrap up v0.6.0's feature scope and will no longer accept new suggestions.
If there occurs to be a small issue that can be fixed easily, then sure, we would be willing to sneak that in, but other than that, all 0.6.0 features are listed in the road map.

@AregevDev
Copy link
Member

MSVC support for sound feature will be very nice, I can help building the native dependencies

@Lakelezz
Copy link
Contributor Author

Lakelezz commented Apr 2, 2019

MSVC support for sound feature will be very nice, I can help building the native dependencies

It's already supported on the v0.6.x-branch as shown in the road map under Implemented referring to #522.

@Lakelezz Lakelezz unpinned this issue Jun 21, 2019
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
enhancement An improvement to Serenity. opinions wanted Discussion or solution to a problem requested.
Projects
None yet
Development

No branches or pull requests

5 participants