#discord-bot #discord #bot #ping #todo

nightly app secubot

Yet another Discord bot!

17 stable releases

2.9.0 Jan 19, 2024
2.8.0 Nov 13, 2023
2.7.0 Sep 24, 2023
2.3.0 Mar 20, 2023
1.2.3 Oct 18, 2022

#982 in Web programming

Download history 7/week @ 2024-01-19 5/week @ 2024-02-23 2/week @ 2024-03-01 238/week @ 2024-03-08 33/week @ 2024-03-15 105/week @ 2024-03-29

376 downloads per month

MIT license

70KB
2K SLoC

Secubot

Rust CI

I'm not a programmer until I write my own Discord bot, right? And what is the best programming language to do so, if not Rust?

The bot was written at first out of the Cyber Warriors' need for a ping cannon replacement, and over time I just kept adding new features.

Features

  • The Mighty Ping Cannon - pings provided users for 10 minutes after which it times out, allows for adding and removing users while pinging
  • TODO lists - provides per-channel TODO lists backed by database, allows to specify assignee, it also posts periodical reminders about uncompleted todos
  • Hall of Fame - provides per-guild lists backed by database designed to allow count occurrences of something by the users with a provided reason
  • Bot versioning - allows for checking the latest release notes and see currently running version

Running

Compile locally

TODO

Docker

Build the image locally with docker build . or pull ghcr.io/seqre/secubot image.

Use the following command to quickly run the bot to test it:

docker run -e SCBT__DISCORD_TOKEN="token" secubot:latest

To have local persistent SQLite database, run:

touch db.sqlite                     // we need to create file first as docker cannot mount non-existing file
docker run \
  -v ${PWD}/db.sqlite:/db.sqlite \  // mount `db.sqlite` to have persistent database
  -e SCBT__DISCORD_TOKEN="token" \  // provide Discord token
  --name secubot \
  secubot:latest

To use proper config file(s), add the following mounts:

touch db.sqlite
docker run \
  -v ${PWD}/config.yaml:/config.yaml:ro \ // mount `config.yaml` file as singular configuration file
  -v ${PWD}/config:/config:ro \           // mount whole `config/` directory if you need to have multiple configuration files
  -v ${PWD}/db.sqlite:/db.sqlite \        // mount `db.sqlite` to have persistent database
  --name secubot \
  secubot:latest

You can use any format that config-rs supports, YAML is given as an example.

Configuration

TODO

Dependencies

~69MB
~1.5M SLoC