All Projects → ewohltman → ephemeral-roles

ewohltman / ephemeral-roles

Licence: MIT License
A Discord bot for managing ephemeral roles based upon voice channel member presence.

Programming Languages

go
31211 projects - #10 most used programming language
Makefile
30231 projects
Dockerfile
14818 projects

Projects that are alternatives of or similar to ephemeral-roles

Discordgo
(Golang) Go bindings for Discord
Stars: ✭ 2,582 (+4429.82%)
Mutual labels:  discord-api, discordgo
disgord
(golang) Google Go Discord Bot
Stars: ✭ 53 (-7.02%)
Mutual labels:  discord-api, discordgo
hikari-lightbulb
The official unofficial command handler for the Python discord API wrapper library, Hikari.
Stars: ✭ 152 (+166.67%)
Mutual labels:  discord-api
DiscordGo
Discord C2 for Redteam....Need a better name
Stars: ✭ 55 (-3.51%)
Mutual labels:  discordgo
Haxicord
The most popular discord API Haxe library (because no others are good enough to be called a library)
Stars: ✭ 42 (-26.32%)
Mutual labels:  discord-api
SataniaBot
The most devilish bot for Discord!
Stars: ✭ 20 (-64.91%)
Mutual labels:  discord-api
Discord-Reposter
Bot for reposting Discord messages (work in progress)
Stars: ✭ 62 (+8.77%)
Mutual labels:  discord-api
go-contrib
Helper for Log configuration, Mixin for properties with fangs
Stars: ✭ 20 (-64.91%)
Mutual labels:  logrus
Rubicon
Dead yo!
Stars: ✭ 14 (-75.44%)
Mutual labels:  discord-api
discord-api-types
Up to date Discord API Typings, versioned by the API version
Stars: ✭ 270 (+373.68%)
Mutual labels:  discord-api
Deadcord
💀 The first raid tool of its kind. Inject Deadcord and raid servers directly from the Discord client. https://t.me/deadcordofficial
Stars: ✭ 144 (+152.63%)
Mutual labels:  discord-api
rollrus
Logrus Rollbar Hook
Stars: ✭ 20 (-64.91%)
Mutual labels:  logrus
myChat
MyChat es una aplicación de mensajería en tiempo real con servidores de Discord (similar a un canal de Discord).
Stars: ✭ 30 (-47.37%)
Mutual labels:  discord-api
Axley
A simple multi-purpose Discord bot being made using Discord.py API wrapper..
Stars: ✭ 16 (-71.93%)
Mutual labels:  discord-api
Ellie
A bot for the Discord chat platform written in Rust with the Serenity library.
Stars: ✭ 14 (-75.44%)
Mutual labels:  discord-api
corgi
A Discord bot made with JDA, Corgi is a server administration bot along with a few other cool features
Stars: ✭ 15 (-73.68%)
Mutual labels:  discord-api
starboard
A starboard dedicated Discord bot.
Stars: ✭ 18 (-68.42%)
Mutual labels:  discordgo
Discord-Selfbot
Discord.js selfbot
Stars: ✭ 24 (-57.89%)
Mutual labels:  discord-api
QDiscord
QDiscord - An unofficial C++ and Qt wrapper for the Discord API.
Stars: ✭ 21 (-63.16%)
Mutual labels:  discord-api
MaSH
A minimalistic Discord API wrapper made in Posix Shell
Stars: ✭ 22 (-61.4%)
Mutual labels:  discord-api

ephemeral-roles


Mentioned in Awesome Go Build Status Go Report Card Coverage Status Dev Chat

A Discord bot for managing ephemeral roles based upon voice channel member presence.


Quickstart

  1. Click on the Ephemeral Roles logo head above or use this link to invite Ephemeral Roles into your Discord server
    1. The 'Manage Roles' permission is required. The invite link above provides that by automatically creating an appropriate role in your server for Ephemeral Roles
  2. Ensure the new role for Ephemeral Roles is at the top (or as near as possible) to the server's list of roles
    1. If you're not sure how or why to do that, take a quick read over Discord's excellent Role Management 101 guide
  3. Enjoy!

What does Ephemeral Roles do?

After the Ephemeral Roles bot is invited to your Discord server, it immediately starts to watch for changes to your voice channels. When a member joins a channel, Ephemeral Roles automatically assigns that member an ephemeral role associated with the channel. If the ephemeral role doesn't exist yet, Ephemeral Roles will create it.

By having your members auto-sorted into ephemeral roles in your member list, it's clear to see who are available for chatting and the channels they are in. This is because Ephemeral Roles leverages the Discord feature that the member list in servers will group together members by role right out of the box.

When a member changes or disconnects from voice channels, even across Discord servers, Ephemeral Roles will account for the change and automatically revoke/reissue ephemeral roles as appropriate.


Example Usage

Orange roles below are automatically managed by Ephemeral Roles
Ephemeral Roles action example
Ephemeral Roles static example
Ephemeral Roles example role list

Monitoring

A Prometheus and Grafana instance have been set up to monitor Ephemeral Roles metrics.

grafana.ephemeral-roles.net

Architecture

Architectural Diagram
Architecture
Architectural diagram created with draw.io
  • ephemeral-roles:
    • Runs in a Kubernetes cluster as a StatefulSet of 10 Pods. Each Pod contains a running instance of the bot
    • A StatefulSet is used so that each Pod has a predictable name so that the bot instance can inform the Discord API which of the 10 Pods it is
    • The Discord API will assign a number of the total guilds (servers) to each of the bot instances to balance the load of managing the guild events
    • If any of the Pods stop running for whatever reason, the StatefulSet will automatically restart them
  • pod-bouncer (https://github.com/ewohltman/pod-bouncer):
    • Runs in a Pod and is responsible for receiving alerts from Prometheus/AlertManager and to act upon them by automatically causing unhealthy Pods for ephemeral-roles to restart
  • ephemeral-roles-informer (https://github.com/ewohltman/ephemeral-roles-informer):
    • Runs in a Pod and is responsible for collecting metrics from the ephemeral-roles instances to update search services such as discord.bots.gg and top.gg

Contributing to the project

Contributions are very welcome! Please follow the guidelines below:

  • Open an issue describing the bug or enhancement
  • Fork the develop branch and make your changes
    • Try to match current naming conventions as closely as possible
    • Try to keep changes small and incremental with appropriate new unit tests
  • Create a Pull Request with your changes against the develop branch

This project is equipped with a full CI / CD pipeline:

  • Linting and unit tests will be automatically run with the PR, providing feedback if any additional changes need to be made
  • Merge to master will automatically deploy the changes live
Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].