{"id":27622592,"url":"https://github.com/ClemBotProject/ClemBot","last_synced_at":"2025-04-23T09:01:36.790Z","repository":{"id":37083732,"uuid":"258677684","full_name":"ClemBotProject/ClemBot","owner":"ClemBotProject","description":"A Discord bot for server management with an emphasis on modularity and configuration. If you have an idea or a feature you would like to contribute feel free to open an issue and we as a community can begin discussion.","archived":false,"fork":false,"pushed_at":"2024-07-16T00:26:05.000Z","size":27305,"stargazers_count":83,"open_issues_count":65,"forks_count":57,"subscribers_count":4,"default_branch":"master","last_synced_at":"2024-07-16T03:57:19.570Z","etag":null,"topics":["csharp","discord-bot","discord-py","dotnet","moderation","python"],"latest_commit_sha":null,"homepage":"https://clembot.io","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/ClemBotProject.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":".github/FUNDING.yml","license":"LICENSE","code_of_conduct":"CODE_OF_CONDUCT.md","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},"funding":{"github":["ClemBotProject","Jay-Madden"]}},"created_at":"2020-04-25T03:21:47.000Z","updated_at":"2024-07-16T00:26:09.000Z","dependencies_parsed_at":"2024-10-26T22:52:20.490Z","dependency_job_id":null,"html_url":"https://github.com/ClemBotProject/ClemBot","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ClemBotProject%2FClemBot","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ClemBotProject%2FClemBot/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ClemBotProject%2FClemBot/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ClemBotProject%2FClemBot/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/ClemBotProject","download_url":"https://codeload.github.com/ClemBotProject/ClemBot/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":250403832,"owners_count":21424794,"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","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":["csharp","discord-bot","discord-py","dotnet","moderation","python"],"created_at":"2025-04-23T09:01:01.599Z","updated_at":"2025-04-23T09:01:36.688Z","avatar_url":"https://github.com/ClemBotProject.png","language":"Python","funding_links":["https://github.com/sponsors/ClemBotProject","https://github.com/sponsors/Jay-Madden"],"categories":["Bots"],"sub_categories":[],"readme":"\u003cp align=\"center\"\u003e\n    \u003cimg src=\"Branding/ClemBot.png\" width=\"275\" height= \"275\" alt=\"ClemBot Logo\"\u003e\n\u003c/p\u003e\n\n# ClemBot\n\n\u003cp align=\"center\"\u003e\n    \u003cbr/\u003e\n    \u003ca href=\"https://discord.gg/QNRbC6k\"\u003e\n        \u003cimg src=\"https://img.shields.io/discord/515071617815019520.svg?label=Discord\u0026logo=Discord\u0026colorB=7289da\u0026style=for-the-badge\" alt=\"Support\"\u003e\n    \u003c/a\u003e\n    \u003ca href=\"https://www.python.org/downloads/\"\u003e\n        \u003cimg src=\"https://img.shields.io/badge/Made%20With-Python%203.10-blue.svg?style=for-the-badge\u0026logo=Python\" alt=\"Made with Python 3.10\"\u003e\n    \u003c/a\u003e\n    \u003ca href=\"https://github.com/ClemsonCPSC-Discord/ClemBot/blob/master/LICENSE\"\u003e\n        \u003cimg src=\"https://img.shields.io/badge/license-mit-e74c3c.svg?style=for-the-badge\u0026logo=appveyor\" alt=\"MIT License\"\u003e\n    \u003c/a\u003e\n\u003c/p\u003e\n\n\u003cp align=\"center\"\u003e\n    \u003ca href=\"https://top.gg/bot/710672266245177365\"\u003e\n        \u003cimg src=\"https://top.gg/api/widget/710672266245177365.svg\" alt=\"ClemBot\" /\u003e\n    \u003c/a\u003e\n\u003c/p\u003e\n\n## Website, Documentation and Configuration Dashboard\n\nhttps://clembot.io\n\n## Intro\n\nA Discord bot for server and community management with a focus on school/programming/fun related commands.\n\n- \u003cb\u003eModeration:\u003c/b\u003e Moderation and Moderation logging is made easy with ClemBot, Banning, Muting and Warning are all\n  supported and easy to use\n\n- \u003cb\u003eRole Management:\u003c/b\u003e Easily manage you and your users roles with designated assignable roles\n\n- \u003cb\u003eCustomizable Prefix:\u003c/b\u003e Whatever you want ClemBot to respond to, it can. Just set your servers preferred prefix\n  with `!prefix \u003cprefix\u003e`.\n\n- \u003cb\u003ePython Repl:\u003c/b\u003e Coding is fun, Discord is fun. Put them together and collaborative learning is easy with a\n  built-in python interpreter. Just type your python code into discord and run it with `!eval` and watch the bot\n  evaluate your code.\n\n- \u003cb\u003eMessage Logging:\u003c/b\u003e ClemBot offers the ability to log message edits and deletions, just\n  run `!channels add message_log #mychannel` to designate a channel as a log message\n\n- \u003cb\u003eTags:\u003c/b\u003e Tags allow you to create message snippets that can be invoked right in discord with a simple inline\n  command. Just run `!tag add  \u003cMyTagName\u003e \u003cMyTagsBody\u003e` and invoke it with `$MyTagName`\n\n- \u003cb\u003eWelcome Messages:\u003c/b\u003e  You can optionally set a message to be sent to new members of your server. Making it easy to\n  make sure people understand rules and procedures.\n\n- \u003cb\u003eExpression Evaluator:\u003c/b\u003e  ClemBot implements the shunting yard algorithm to allow for rapid mathematical\n  expression evaluation right in discord. just run `!calc 1+1` to get your result\n\n- ...and so much more!\n\nClemBot is in current active development so check back often to see what's new!!\n\n# Bot Invite\n\nTo invite ClemBot to your server,\nclick [here](https://discord.com/api/oauth2/authorize?client_id=710672266245177365\u0026permissions=398828104950\u0026scope=bot).\n\n## Community\n\nWe are a community focused on learning and acceptance; anyone is welcome. If you have an idea or a feature you would\nlike to contribute, feel free to open an issue and we as a community can begin discussion.\n\n# Development\n\nTo start developing and contributing to this project, please see [CONTRIBUTING.md](CONTRIBUTING.md)\n\n# Architecture overview\n\nClemBot utilizes a standard three tier architecture. \nThe **ClemBot.Bot** project makes requests to the **ClemBot.Api** project, which then subsequently queries the PostgreSQL database.\n\n## ClemBot.Bot\n\nThe bot is set up in a simple way. There are 3 layers, the Cog Layer, the Service Layer and the Route Layer. Cogs and\nServices communicate exclusively through the messenger. This allows us to maintain total decoupling of the layers.\n\n1. **Cog Layer:** This is where the frontend bot command code resides. Anything that you directly use to interface with\n   discord goes in this layer.\n2. **Service Layer:** This is where all things that are bot related but not controlled through front end commands live.\n   Things like user tracking, event handling, etc., all go in here.\n3. **Route Layer:** This is the route abstraction on top of the ApiClient. This layer defines methods that correspond to\n   routes that are sent back to the ClemBot.Api project\n\nThe bot loads Cogs and Services dynamically. To create a new command, simply create a class that inherits from\n[commands.Cog](https://discordpy.readthedocs.io/en/stable/ext/commands/api.html?highlight=cog#discord.ext.commands.Cog)\nand define a setup function in module scope at the bottom.\nSee [example_cog.py](https://github.com/ClemsonCPSC-Discord/ClemBot/blob/master/bot/cogs/example_cog.py) for an example.\n\nThe bot does the same thing for services, to see how to define a service,\nsee [example_service.py](https://github.com/ClemsonCPSC-Discord/ClemBot/blob/master/bot/services/example_service.py).\n\n## ClemBot.Api\n\nThe API utilizes the following technologies...\n\n* [Asp.Net](https://dotnet.microsoft.com/apps/aspnet)\n* [Entity Framework](https://docs.microsoft.com/en-us/ef/)\n* [MediatR](https://github.com/jbogard/MediatR)\n* [Serilog](https://serilog.net/)\n\n...and is split up into several different projects under one solution:\n\n- **ClemBot.Api.Data** contains the Entity Framework code-first database models and contexts.\n- **ClemBot.Api.Core** contains the startup project and Asp.Net endpoints located in the `Features` folder.\n- **ClemBot.Api.Services** contains the caching and authorization services that perform more complex tasks.\n\n## ClemBot.Site\n\nThe site is a server-side Nuxt.js and Vue.js app that integrates with Discord OAuth.\n\n* [Vue.js](https://vuejs.org/)\n* [Nuxt.js](https://nuxtjs.org/)\n\n## ClemBot Pipeline Status\n\n| Service | Pipeline                        | Status                                                                                                                                                   |\n|---------|---------------------------------|----------------------------------------------------------------------------------------------------------------------------------------------------------|\n| Api     | ClemBot.Api Master Integration  | ![ClemBot.Api Master Integration](https://github.com/ClemBotProject/ClemBot/actions/workflows/ClemBot.Api-Integration.yml/badge.svg?branch=master)       |\n| Api     | ClemBot.Api Master Deployment   | ![ClemBot.Api Master Deployment](https://github.com/ClemBotProject/ClemBot/actions/workflows/ClemBot.Api-Deployment.yml/badge.svg?branch=master)         |\n| Bot     | ClemBot.Bot Master Integration  | ![ClemBot.Bot Master Integration](https://github.com/ClemBotProject/ClemBot/actions/workflows/ClemBot.Bot-Integration.yml/badge.svg?branch=master)       |\n| Bot     | ClemBot.Bot Master Deployment   | ![ClemBot.Bot Master Deployment](https://github.com/ClemBotProject/ClemBot/actions/workflows/ClemBot.Bot-Deployment.yml/badge.svg?branch=master)         |\n| Site    | ClemBot.Site Master Integration | ![ClemBot.Site Master Integration](https://github.com/ClemBotProject/ClemBot/actions/workflows/ClemBot.Site-Integration.yml.yml/badge.svg?branch=master) |\n| Site    | ClemBot.Site Master Deployment  | ![ClemBot.Site Master Deployment](https://github.com/ClemBotProject/ClemBot/actions/workflows/ClemBot.Site-Deployment.yml/badge.svg?branch=master)       |\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FClemBotProject%2FClemBot","html_url":"https://awesome.ecosyste.ms/projects/github.com%2FClemBotProject%2FClemBot","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FClemBotProject%2FClemBot/lists"}