Skip to content

Repository files navigation

Sakamoto

Sakamoto is a modular Python Discord bot inspired by the Nichijou character. It focuses on voice features for small-to-medium communities.

It is a Python rewrite intended to apply stronger modular design than earlier projects.

Sakamoto icon
License Commit activity Dependencies

Run

See the setup guide and configuration reference for integration-specific tokens.

Docker Compose

export TOKEN='YOUR_DISCORD_BOT_TOKEN'
./init-docker.sh

By default, Docker Compose builds Sakamoto locally.

To enable automatic updates, uncomment the published ghcr.io/taichikuji/sakamoto:latest image, the Watchtower label, and the updater service in docker-compose.yml. The updater uses the maintained nickfedor/watchtower fork, only watches labelled containers, and removes old images after successful updates.

Watchtower checks daily at midnight UTC by default. Override its six-field cron expression with WATCHTOWER_SCHEDULE.

Docker image

docker build -t sakamoto:latest .
docker run -e TOKEN='YOUR_DISCORD_BOT_TOKEN' sakamoto:latest

Prebuilt images are available as ghcr.io/taichikuji/sakamoto:latest; they can be used with Kubernetes, though this repository does not provide a Kubernetes manifest.

Develop

pipenv install --dev
export TOKEN='YOUR_DISCORD_BOT_TOKEN'
pipenv run python main.py

Extensions live in extensions/, grouped by responsibility:

  • core/ contains always-on administration such as loading, syncing, and shutdown.
  • audio/, moderation/, community/, integrations/, and general/ contain user-facing domains.

See the contribution guide, domain context, and wiki.

Command analytics

Sakamoto stores UTC daily aggregate command counts so the Discord application owner can review usage with /analytics. The report defaults to 30 days and accepts a period from 1 to 90 days.

The analytics table contains only the command's fully qualified name and its successful and failed invocation counts. It does not store user or server history, Discord IDs, command arguments or options, message content, search terms, URLs, IP data, or command error details. Direct-message interactions are ignored. Daily rows are permanently deleted after 90 days.

Every guild slash command completion and unhandled error is counted. Commands whose normal operation can end in a handled failure, such as an upstream service error or an immediate playback failure, additionally mark that outcome as failed instead of successful.

Dependencies

Can be seen @ Pipfile

About

A fun, easy to use Music Bot for Discord!

Topics

Resources

Contributing

Stars

8 stars

Watchers

2 watching

Forks

Packages

Used by

Contributors

Languages