Skip to content

Sonia-corporation/sonia-discord

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

Sonia Discord

The Sonia application for Discord

Quality:
GitHub last commit Maintainability CodeFactor DeepScan grade Test Coverage codecov Mutation testing badge GitHub issues GitHub pull requests Build Release Dependencies Dev Dependencies semantic-release code style: prettier

Community:

All Contributors

commitizen PRs Discord

Statistics:
GitHub release (latest by date) GitHub top language GitHub repo size GitHub code size in bytes GitHub

Sonia bot

Add Sonia to my guild.

Sonia commands

Sonia will treat one command at a time.
You can use either -, ! or $ as prefix for the commands.
There is no case sensitivity.

Example:

  • @Sonia -version
  • @Sonia !VERSION
  • @Sonia $v

Cookie

Commands:

  • cookie
  • cookies (alias)
  • c (shortcut)

Sonia will send you a message containing:

  • A cookie (a tasty one).

Example:

  • @Sonia !cookie
  • @Sonia !C

Error

Commands:

  • error
  • bug (alias)

Sonia will send you a message containing:

  • A description of the error.
  • Some nasty bullshit text.
  • This is a useless feature, please, continue.
  • We are very sorry about that. We think.

Example:

  • @Sonia !error
  • @Sonia !BUG

Feature

Commands:

  • feature
  • f (shortcut)

Features (first and only argument followed by optional flags):

This is a special command used to configure Sonia only for the current Guild or channel.
There are multiples option to customize Sonia (some will change her behaviour on the whole Guild and other only for the current channel).

Sonia will send you a message containing information about the changes you just made.
Basically she will try to help you if you fill bad information and just inform you if the changes were successful.

  1. noon

Configure the message sent at noon on the given channel.
The default timezone is Europe/Paris and this will be configurable later.

  • disabled (or d): disable the noon message on the channel
  • enabled (or e): enable the noon message on the channel
  • help (or h): get some help with this command
  • humanize (or hu): display the current configuration
  • status (or s): display if the feature is enabled or not
  1. release-notes

Configure the message containing the new release notes on the given channel.

  • disabled (or d): disable the release notes message on the channel
  • enabled (or e): enable the release notes message on the channel
  • help (or h): get some help with this command
  • humanize (or hu): display the current configuration
  • status (or s): display if the feature is enabled or not

Example:

  • @Sonia !feature noon
  • @Sonia !F

Heartbeat

Commands:

  • heartbeat
  • hb (shortcut)

Sonia will send you a message containing:

  • Her heartbeat (her ping).

Example:

  • @Sonia !heartbeat
  • @Sonia !hb

Help

Commands:

  • help
  • h (shortcut)

Sonia will send you a message containing:

  • A list of all the commands available.
  • The application readme link.

Example:

  • @Sonia !help
  • @Sonia !H

Lunch

Commands:

  • lunch
  • l (shortcut)

Sonia will send you a message containing:

  • A reminder that this is lunch-time for you.

Example:

  • @Sonia !lunch
  • @Sonia !L

Quote

Commands:

  • quote
  • q (shortcut)

Sonia will send you a message containing:

  • A random quote

Example:

  • @Sonia !quote
  • @Sonia !q

Release notes

Commands:

  • release-notes
  • r (shortcut)

Sonia will send you a message containing:

  • The application version (as a link).
  • The application release date.
  • The application release notes.
  • The application changelog link.
  • The total release count.

Example:

  • @Sonia !release-notes
  • @Sonia !r

Version

Commands:

  • version
  • v (shortcut)

Sonia will send you a message containing:

  • The application version (as a link).
  • The application release date.
  • The application initialization date.
  • The application release notes (first 800 chars).
  • The application changelog link.
  • The application status.
  • Her emotional state.
  • The total release count.

Example:

  • @Sonia !version
  • @Sonia !VERSION
  • @Sonia !v
  • @Sonia !V

Sonia behaviour

Sonia will never respond to herself - no infinite loop :(
Sonia will never respond to another bot - love between them will not be tolerated.
Sonia has nothing to hide and thus she displays her current activity.

In a private channel (also known as DM)

Sonia will respond to each of your messages but within a predefined priority:

  • commands (handle the commands if you follow the right syntax)
  • ping (respond pong)
  • hotel (respond trivago)
  • any question? (respond a pizza lover joke)
  • default message (when your message is very basic, Sonia will tell you that it is noon, as usual (even if it is untrue))

In a public text channel (also known as text)

For now, Sonia cannot be configured over which channel she responds to.
In the future, Sonia will be disabled by default on all channels.
A command will enable Sonia on the given channel (a command will also be available to disable her).
This dev is a bit more complicated because Sonia will have to store which channels are ready for her or not in a database.

When a message on the channel is sent, Sonia will only respond if she is mentioned personally.
This counts as a DM response for Sonia, so prepare to have a friendly message dedicated to you.

Sonia will respond to each of your messages but within a predefined priority:

  • commands (handle the commands if you follow the right syntax)
  • ping (respond pong)
  • hotel (respond trivago)
  • any question? (respond a pizza lover joke)
  • simple (respond basic)
  • basic (respond simple)
  • default message (when your message is very basic, Sonia will tell you that it is noon, as usual (even if it is untrue))

Example:

@Sonia yo

On global mentions like @here and @everyone, Sonia will send a message to tell everybody it is noon (even if it is a lie).

To use a command, you must ask her personally.

Example:

@Sonia !version

Guild new member welcome message:

When a newcomer joins the channel, Sonia will send a friendly message to welcome them.
For now, the only channel receiving welcome messages will be the general.
It will also work if accents are used such as gΓ©nΓ©ral.

Sonia new guild message:

When Sonia joins a new guild, she will send a cookie to the general channel.

New guild member:

When a new member joins your guild, she will send a message on the general channel to welcome him.

New release notes:

When a new version of Sonia is available, she will send a message on the general channel containing basically the release-notes command.

Note:

Works with Firebase. See the Firebase section to learn more about it.

Errors

If Sonia receives a Discord error after sending a message she will send a new message containing this error to help you to debug it.

Nevertheless, sometimes the error is purely developmental and this is why Sonia will provide:

Sonia sends the generic Discord errors to the Sonia Discord errors channel.

Warnings

Sonia sends the generic Discord warnings to the Sonia Discord warnings channel.

Firebase

Because Sonia is more and more enhanced as the time fly and that each guild wants to configure Sonia differently a storage solution was required.
Firebase was used to have a dedicated storage and allow basically to do whatever we want.

Guilds

Each guild has its own configuration through Firebase based on the guild's Snowflake.
Basically, any option edited via Sonia's commands is stored per guild on a Firestore.
The guilds have a version to easily maintain and handle the breaking changes during the new releases.
The breaking changes are handled at the start of the application and no other operation related to Firebase guilds are allowed during that time.
Once the breaking changes are handled the Firestore is watched and any changes that occurred trigger a DML with an Elf store.
This is a very efficient way to handle the data and avoid performance issues related to Network.

Once the store loading is done - where the first Firebase guilds were received -, Sonia will try to send the release notes on each guild.

Contributing

Check out the contributing file before helping us.

License

This project is licensed under the MIT License - see the license for details.

Contributors

Thanks goes to these wonderful people (emoji key):


All Contributors

πŸ“– πŸ”§

Automated code reviews

πŸ‘€ πŸ›

Geoffrey 'C0ZEN' Testelin

πŸ’» 🎨 πŸš‡ πŸ€” πŸ“ πŸ“– πŸ”§ πŸ›‘οΈ πŸ‘€ πŸ’¬ 🚧 πŸ›

Nathan Bergamini

πŸ’» πŸ€”

Semantic Release Bot

πŸ“– πŸ”§ πŸ›‘οΈ

Vilteros

πŸ’» πŸ€” πŸ“– πŸ‘€

WhiteSource Renovate

πŸ”§ πŸ›‘οΈ

asmodee-bellanie

πŸ‘€

This project follows the all-contributors specification.
Contributions of any kind are welcome!