Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Distributed microservices oriented backend for a web service with Discord interoperations integrated, designed to provide community management tasks for a StarCitizen's organization.

License

Notifications You must be signed in to change notification settings

eyagovbusiness/GuildManagerSC

Repository files navigation

GuildManagerSC

Tech stack design patterns

ASP.NET Core, REST API, producer-consumer with Rabbit MQ, API Gateway with YARP, EntityFramework with PostgreSQL, secrets management with Vault, service registry with Consul, microservices with Docker and container orchestration, DDD, CleanArchitecture, RailwayOrientedProgramming(ROP) pattern... These are just some examples of the many technologies and patterns used in this project.

Mission

The mission is to develop a cloud-native, distributed application comprising multiple microservices, aimed at streamlining online community management. By integrating directly with Discord servers, we aim to provide essential automations for large communities. This initiative is designed to minimize manual intervention and management time, paving the way for large-scale events and enhancing community engagement.

Motivations

The motivation behind starting this project is to tackle a project that is both challenging and exciting, and to create an environment where developers can work with the most recent technologies. This project is not about economic profit, it is more about creating something that adds real value to online communities that use Discord. We want to create a professional setting where developers can be part of the whole process of developing a product, encouraging a setting where there's continuous learning, creativity, and fun.

Project description

The project can be wrapped into different domains:

Members

The application has a community members management system:

1. SignUp: Users can create a member account after authenticating with Discord OAauth2 and they will be asked to select the Discord community server they whant to SignUp for and optionally they can provide an in-game handler. Additionaly each guild may pick between a list of SignUp requirements such "the member needs to have reacted accepting the rules message in Discord (and provide message ID)". After this the member account is created in that community with all the member roles from the Discord server(plus other public Discord user data such display name and avatar).

2. SignIn: Members can SignIn just clicking a button and completing the Discord OAuth2 process(no need to remember any other account than your Discord one!). Sessions are persisted by a refresh token and access to resources is granted by an access token.

3. Modular web role permissions: Each Discord role from the community server can be marked as a web role and be configured with a set of permissions. Those permissions determine the actions which members with that role assignes can perform in the web platform(i.e: access events, manage events, access members panel, etc). When member roles are updated permissions will be already updates in the next request(no security breach).

4. Sync with Discord: The application supports eventual consistency between the Discord community servers and the cloud community data. This means when a member role is updated from Discord it also updated in the cloud, the same applies for member names, avatar and more.

5. Members panel: The application has a members pannel with advanced filtering options to facilitate the members management. In this panel specific member web application related data can be accessed such as event participations, incident reports or licenses aswell as some Discord related information like roles.

Licenses

Guild members can Create, Update and Delete Licenses that will certify specific sets of in-game skills and allow “licensed” members to do certain activities. Licenses will have a list of requisites that every member that wants to obtain the license will have to prove while playing with other members.

Members can enroll to be evaluated for a certain license and once the member will be certified with all required skills by the license, the member will automatically get the license. When a member gets a license, automatically the system will assign him the respective role in Discord, so in every moment licenses in the webpage and the respective license roles in Discord are synchronized.

When a license is updated adding a new skill requirement, automatically all members will lose the license eventually until the new required skill is proved, then the license will be again automatically assigned to the member.

Members can create new Licenses that have to be approved by a minimum number of other members in order to be issued. Once the license is approved it can be issued, members can apply as candidates and the respective role in Discord is created.

Guild Event History and Achievement History

The system will persist a history of all the events made by the guild with a start date, finish date, name and short description. Also there will be a history of the relevant achievement made by the guild with information about the name, short description and date of the achievement as well as the guild members that participated.For security reasons only finished events will be displayed.

SocialMedia

Some guild members can be also content creators and their content can be shown on the web page with the type of social media, description, links and giveaways or prizes they can offer. Additionally the guild can also have its own social media like discord or other. Registered users can subscribe to Discord newsletter and the Discord bot will notify them through private messages about any updates(i.e some streamer is online or some event guild was created). The user will have a list of topics to subscribe to.

Events

Guild members can create and manage events at any time. Other members can join the event and the event creator can assign other members to be managers of the event(between the enrolled members) and help with the event management. Each event will require a template with the discord channels that will be used for the event and assign each enrolled member to one of the channel templates. Once the event will start, the system will create a new private category in Discord following the described channels template from the webpage that will be visible only to the enrolled members in the event.

Discord templates will have a mandatory channel to interact with the system by two discord bot commands, one to “report for the service”, the second to “end the service”. This will register the assistance of a member to the event.The “report for the service” command will also automatically move the member to the associated channel according to the web template and measure the member participation in the event.

The end of the event will be triggered from the webpage by one of the event managers, and the dedicated discord channels will be deleted by a simple action from the webpage also performed by one of the event managers(only available after the event is marked as finished).

Every event will have a name, a summary, a detailed description, a start date and an estimated finish date. Also to support integration with discord every event will have a category template and the created category Id from Discord when the event is started.

The user registration form to an event will contain an estimated join date and an estimated end date of the participation and a short text where the user can write notes to for example express preferences of the participation.

Request Services

The webpage will have an in-game service request section where eligible users can request services to the guild fulfilling a form with a title and description of the required service as well as an in-game estimate payment. The form will also have a list of offered services from which the player can choose(the list will be defined by the guild managers), between the options there has to be an “Other” option.

The user has to select also a date for the service that is requesting or can also declare the service request is urgent and has to be as soon as possible. Once the form is sent, it is registered into the system and a message is sent to the discord server where members can accept the service request.

To be eligible for requesting services the user will have to provide an in-game handle, a Discord handle and have joined the guild’s discord server at the moment of sending the service request.

Additionally the user can also select how to be notified about the service request status updates, by default it will be through Discord thanks to the discord bot sending a private message to the user about the updates but the user can also choose to provide an email address to be notified by email instead. Finally the user can also select both options. Fraudulent service requests will mark the applicant as unreliable.

Diplomacy

The guild’s webpage will have a Diplomacy section where all the current relationships with other guilds will be displayed. The user will be able to filter by the type of diplomatic status(like Economic Ally, Military Ally, Non-Aggression agreement, Enemy…). Each diplomatic relationship will have a short description and the date when it was created. Additionally a diplomatic relationship can also have an Expiry date (i.e:Non-Aggression agreements).

Justice

The webpage has to support an incident report system where guild members can report incidents with other members, the dedicated judge members will manage the reports and may create sentences from them in case it is pertinent. The first approach establishes that a guild member with 3 issued sentences will be kicked from the guild.

Unified Domain Model (Class diagram)

For this project I have choose a Model first approach and for that purpose I have created a monolythic model of the whole application to have a clear and somple image of the domain model(intentionally domain boundaries can be appreciated in the picture by distance between each domain).

Model

Architecture

Architecture

About

Distributed microservices oriented backend for a web service with Discord interoperations integrated, designed to provide community management tasks for a StarCitizen's organization.

Topics

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Contributors 3

  •  
  •  
  •