{"id":31017289,"url":"https://github.com/pmdevita/beatrice","last_synced_at":"2025-09-13T07:54:11.491Z","repository":{"id":45975757,"uuid":"431334781","full_name":"pmdevita/Beatrice","owner":"pmdevita","description":"Discord bot with fun experimental features and tooling","archived":false,"fork":false,"pushed_at":"2025-08-17T21:32:55.000Z","size":574,"stargazers_count":2,"open_issues_count":3,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-09-09T03:35:57.403Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/pmdevita.png","metadata":{"files":{"readme":"Readme.md","changelog":null,"contributing":null,"funding":null,"license":null,"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}},"created_at":"2021-11-24T03:31:03.000Z","updated_at":"2025-08-17T21:32:59.000Z","dependencies_parsed_at":"2024-05-19T06:25:44.349Z","dependency_job_id":"e43b18b1-720b-4c72-9509-bd98c9106f4f","html_url":"https://github.com/pmdevita/Beatrice","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/pmdevita/Beatrice","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pmdevita%2FBeatrice","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pmdevita%2FBeatrice/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pmdevita%2FBeatrice/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pmdevita%2FBeatrice/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/pmdevita","download_url":"https://codeload.github.com/pmdevita/Beatrice/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pmdevita%2FBeatrice/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":274935967,"owners_count":25376836,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-09-13T02:00:10.085Z","response_time":70,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"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":[],"created_at":"2025-09-13T07:53:55.017Z","updated_at":"2025-09-13T07:54:11.482Z","avatar_url":"https://github.com/pmdevita.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Beatrice\n\nThis is Beatrice, a custom Discord bot written for my Discord server. She's named after the character Beatrice from \nRe:Zero and some of her responses are written in-character. Just as Re:Zero Beatrice guards the forbidden library, this \nBeatrice guards my server (or something lol).\n\nBeatrice has a number of notable technologies that were developed along with her, including:\n\n- [nextcord-ormar](https://github.com/pmdevita/nextcord-ormar), easy and quick Django-like database integration \nfor Nextcord. Most apps under Beatrice had their database code written in minutes or less with this tool. Database \nmanagement is also streamlined through the use of nxalembic, nextcord-ormar's wrapper around the Alembic migration tool.\n\n- ![Efficient async timers](beatrice/util/timer.py) for apps to schedule events with optional repeats, using native \nDateTime and TimeDelta objects.\n\n- ![Advanced audio playback](beatrice/sound_manager/cog.py) supporting multiple audio channels in a single voice \nchannel connection and supporting multiple simultaneous connections across multiple guilds, all mixed \nand processed in realtime, with multithreaded encoding/decoding and async sockets.\n\n- Beatrice Chat, a neural network fine-tuned from Microsoft's DialoGPT to talk like Beatrice.\n\n- Cog Loader, a system for loading cogs as defined by a config file. Cog Loader also allows you to restrict a cog to \nonly running in specific guilds or in DMs.\n\nThe full set of apps running under Beatrice include:\n\n- Beatrice Chat\n- SplatGear, a service to alert you when gear you want is available on Splatoon 2's SplatNet app\n- Schedule, a service to schedule Beatrice to alert you at a specific time\n- Nicknames, a service to save and load a server's nicknames and apply mass changes to them, such as randomly \nshuffling everyone's usernames or anagraming them. Used for creating chaos.\n- A terminal console for editing or viewing info for apps and easing on-the-fly debugging\n- A hi command, ping command, and some server specific clean up tasks.\n- Basic support for YouTube audio playback and some funny sound effects\n- Sound Manager, a service for other cogs that provides support for advanced and efficient audio playback\n- Sleep, a service to yell at those still in VC late at night that they should go to sleep\n- Random Sound, a service to play random sound effects ala [1 hour of silence occasionally broken up by Vine boom sound effect](https://www.youtube.com/watch?v=ameTtKHP5SA)\n- NameColor, a service that allows users to set their username color in a server\n- MediaToCDN, a service to rewrite media.discordapp.net links to cdn.discordapp.com links for mobile users\n- Typing Mute, a service to mute users who are currently typing with their absurdly loud keyboards\n\n## Configuration\n\nBeatrice requires two different configurations, the main config and the cog config.\n\n### Main config\n\n```ini\n[general]\nprefix = \"-b \"\ntoken = discord_bot_token\ncogs = cogs.conf\nlogging_folder =\nlogging_name = discordbot\ndb_url = sqlite://db.sqlite3\nlocale = America/New_York\noperator = 1234_id_of_operator_user\nuser_agent = Beatrice/pmdevita\n\n[clean_up]\nusers = username:discriminator,username:discriminator\n\n[chat]\nsocket_path = /tmp/beatrice_chat.sock\n\n[starred]\nthreshold = 3\nemoji = ⭐\n```\n\n### Cog config\n\nCogs can be imported and enabled in three categories\n\n- `[all guilds]` For cogs that are enabled in all guilds\n- `[dm]` For cogs that are enabled in all dms\n- `[guild_id]` To enable a cog specifically in that guild\n\n```ini\n[all guilds]\nBeatrice.manage.basic\nBeatrice.manage.console\nBeatrice.manage.schedule\nBeatrice.splatgear\n\n[dm]\nBeatrice.manage.basic\nBeatrice.manage.schedule\nBeatrice.splatgear\n\n[guild_id]\nBeatrice.manage.clean_up\nBeatrice.chat\nBeatrice.sound_manager\nBeatrice.youtube\n```\n\n## Notes\n\nWith the addition of uvloop, a Python 3.9 bug was uncovered that causes the Sound Manager to pin a CPU core to \n100% as soon as any audio is played. If you are using Python 3.9, it's recommended to either disable uvloop or \nmove to Python 3.10+.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpmdevita%2Fbeatrice","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fpmdevita%2Fbeatrice","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpmdevita%2Fbeatrice/lists"}