{"id":20696106,"url":"https://github.com/haliphax/aethersprite","last_synced_at":"2026-02-24T10:03:25.968Z","repository":{"id":143025664,"uuid":"252529965","full_name":"haliphax/aethersprite","owner":"haliphax","description":"Discord bot and extension framework","archived":false,"fork":false,"pushed_at":"2025-12-29T00:23:11.000Z","size":464,"stargazers_count":1,"open_issues_count":10,"forks_count":1,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-12-31T18:30:22.213Z","etag":null,"topics":["bot","bot-framework","chat-bot","discord","discord-bot","discord-py","fastapi"],"latest_commit_sha":null,"homepage":"https://haliphax.github.io/aethersprite/","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/haliphax.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":".github/FUNDING.yml","license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null},"funding":{"github":"haliphax","ko_fi":"haliphax"}},"created_at":"2020-04-02T18:04:01.000Z","updated_at":"2025-12-29T00:23:14.000Z","dependencies_parsed_at":"2025-07-15T14:26:40.214Z","dependency_job_id":"11dc2b46-db79-4b8e-82c2-f09879930796","html_url":"https://github.com/haliphax/aethersprite","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/haliphax/aethersprite","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/haliphax%2Faethersprite","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/haliphax%2Faethersprite/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/haliphax%2Faethersprite/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/haliphax%2Faethersprite/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/haliphax","download_url":"https://codeload.github.com/haliphax/aethersprite/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/haliphax%2Faethersprite/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29779262,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-24T04:54:30.205Z","status":"ssl_error","status_checked_at":"2026-02-24T04:53:58.628Z","response_time":75,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["bot","bot-framework","chat-bot","discord","discord-bot","discord-py","fastapi"],"created_at":"2024-11-17T00:12:37.729Z","updated_at":"2026-02-24T10:03:25.962Z","avatar_url":"https://github.com/haliphax.png","language":"Python","funding_links":["https://github.com/sponsors/haliphax","https://ko-fi.com/haliphax"],"categories":[],"sub_categories":[],"readme":"# Aethersprite\n\nA [Discord][] bot and extension framework\n\n![Aethersprite](https://github.com/haliphax/aethersprite/raw/assets/aethersprite.jpg)\n\n- [Features](#features)\n- [Installing](#installing)\n- [Running](#running)\n- [Command categories](#command-categories)\n- [Independent commands](#independent-commands)\n- [Independent settings](#independent-settings)\n- [Extension packs](#extension-packs)\n\n## 📣 Features\n\n- Multi-server, multi-channel capable\n- Built on [discord.py][], so new commands are easy to create and integrate\n- Server- and channel-specific settings framework for command customization\n  - Input and output filters for further customization of settings\n- Role-based authorization for commands\n- Persistence of data and scheduled events during downtime\n- [FastAPI][]-based web application for web hooks, pages, file storage, etc.\n- Deal with friendly role and channel names in commands, but store reliable IDs\n  for permanence\n- [TOML][] configuration file for immutable settings\n- Able to import external command modules as [extension packs][]\n\n[Back to top](#aethersprite)\n\n## 👷 Installing\n\nFirst, make a `config.toml` file from the provided `config.example.toml` file,\nproviding it with your username, API token, and any settings tweaks you wish to\napply.\n\nThen, install the bot package in your Python environment of choice:\n\n```shell\npip install -U 'aethersprite@git+https://github.com/haliphax/aethersprite.git'\n```\n\n\u003e ℹ️ If you wish to take advantage of web modules, be sure to add the `[web]`\n\u003e optional dependency specifier to the package source, like so:\n\n```shell\npip install -U 'aethersprite[web]@git+https://github.com/haliphax/aethersprite.git'\n```\n\n[Back to top](#aethersprite)\n\n## 🏃 Running\n\nCommands must be run in the same directory as your `config.toml` file.\n\nTo start the Discord bot:\n\n```shell\npython -m aethersprite\n```\n\nTo start the web application:\n\n```shell\npython -m aethersprite.webapp\n```\n\n[Back to top](#aethersprite)\n\n## 📖 Command categories\n\nThese categories (referred to as \"Cogs\") provide multiple commands.\n\n- `alias`\n  Manage aliases for other commands\n- `only`\n  Only allow whitelisted commands in a channel\n- `settings`\n  Manipulate the bot's settings\n- `yeet`\n  Disable other commands per-server and per-channel\n\n[Back to top](#aethersprite)\n\n## 🎲 Independent commands\n\n- `github`\n  Information about the project and a link to this repository\n- `gmt`\n  Get the current time (or an offset from now) in GMT\n- `nick`\n  Change the bot's nickname per-server\n- `poll`\n  Create and manage polls that members can vote on\n- `roles`\n  Allow members to manage their own membership in chosen roles\n- `roles.catalog`\n  Like `roles`, but uses a permanent post rather than on-demand access\n- `wipe`\n  Wipes all messages in the current channel (after confirmation)\n\n[Back to top](#aethersprite)\n\n## 🔧 Independent settings\n\nSome of the settings in the project do not have corresponding commands, and\noperate based entirely on events.\n\n| Setting            | Scope   | Description                                                                                                                                                                                                                                                                                                                                         |\n| ------------------ | ------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |\n| `badnames`         | Server  | A comma-separated list of substrings to search for in usernames to auto-kick.                                                                                                                                                                                                                                                                       |\n| `greet.channel`    | Server  | The channel where greeting messages should be sent. Defaults to an empty value. Both the channel and message must be set before this feature will be enabled.                                                                                                                                                                                       |\n| `greet.message`    | Server  | The message that will be used to greet new users when they join the server. If set to the default, no greeting will be posted. You may use the `{name}` token in your message, and it will be replaced with the new member's username. The `{mention}` token will mention the user. The `{nl}` token will be replaced with a line break (new line). |\n| `nameonly`         | Server  | If set to anything other than the default value, the bot will only respond if it is mentioned directly.                                                                                                                                                                                                                                             |\n| `nameonly.channel` | Channel | Like `nameonly`, but this setting applies to individual channels.                                                                                                                                                                                                                                                                                   |\n| `prefix`           | Server  | Change the bot's command prefix. (Default: `!`) The bot will respond when mentioned directly, regardless of this setting.                                                                                                                                                                                                                           |\n\n[Back to top](#aethersprite)\n\n## 🎁 Extension packs\n\n- [ncfacbot][] - The [Nexus Clash][] Faction Discord Bot\n- [Realm TTRPG Bot][]\n\n[Back to top](#aethersprite)\n\n[discord.py]: https://discordpy.readthedocs.io\n[discord]: https://discordapp.com\n[discord bot safe readme]: ./ncfacbot/extensions/safe.md\n[extension packs]: #extension-packs\n[fastapi]: https://fastapi.tiangolo.com\n[ncfacbot]: https://github.com/haliphax/ncfacbot\n[nexus clash]: https://www.nexusclash.com\n[realm ttrpg bot]: https://github.com/realm-ttrpg/discord-bot\n[toml]: https://github.com/toml-lang/toml\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fhaliphax%2Faethersprite","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fhaliphax%2Faethersprite","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fhaliphax%2Faethersprite/lists"}