A Discord bot designed to build better communities by encouraging a positive and constructive relationship between community and staff.

Overview
Suggestions logo

Suggestions

A Discord bot designed to build better communities by encouraging a positive and constructive relationship between community and staff.

version discord issues


Statistics

  • Used by nearly 50,000 servers!
  • Over 1 million suggestions submitted!
  • Over 2 million commands ran!
  • Serving servers publicly since August 2018!
  • Verified by Discord on April 13, 2020!
  • More statistics TBD 😛

Features

  • Configurable channel to post suggestions too
  • Manage suggestions by approving, rejecting and adding notes
  • Change emojis added to suggestions
  • A private staff-only channel for your staff members to post suggestions to
  • Custom configuration for various aspects of the bot*
  • Learn more at our website

* View the documentation to learn how to fully configure the bot

Development

To set up this repository to develop and contribute, there are a few pre-requisites you'll need:

  • Node.js v16.x.x
  • Git
  • Docker (optional)
  • Docker Compose (optional)
# clone the repository to your development environment
> git clone https://github.com/suggestionsbot/suggestions-bot
# install the dependencies using yarn or npmg
> yarn install # or npm install
# run the development environment
> yarn dev # or npm dev

Important Links

Comments
  • feat: Error tracking

    feat: Error tracking

    Given the real-time nature of errors, it'd be nice to have some form of error persistence so that when we are looking to help users we simply search by error ID rather then needing to manually parse logs which are sometimes days worth to maybe find the error.

    This would either be done via Garven, or a third party service such as sentry.

    My preference is trending towards something in house as the primary use case requires being able to uniquely identify errors, rather then simply tracking if an error has occurred within the service.

    feature 
    opened by Skelmis 3
  • bug: Possible data loss on guild count aggreation

    bug: Possible data loss on guild count aggreation

    When looking at guild aggregation for statistics purposes we base the count off of the latest len(self.bot.guilds), this might be a bug in the sense in theory self.bot.guilds is only ever actually populated on start up.

    Relevant line: https://github.com/suggestionsbot/suggestions-bot/blob/master/suggestions/stats.py#L178

    bug 
    opened by Skelmis 2
  • feat: Suggestion voter lists

    feat: Suggestion voter lists

    In the original implementation of suggestions with reactions, we were able to see a list of everyone who had reacted with a ✅ or a ❌ to a suggestion through the Discord feature of viewing who reacted to a emoji. However, with buttons, we are unable to view this list.

    A possible solution would be to have a website to display this list of people who upvoted/downvoted the suggestion.

    feature 
    opened by alanlichen 2
  • feat: Cluster IPC

    feat: Cluster IPC

    Ideally it would be nice to remove the dependency on the database for actions which should be IPC.

    This will be implemented using Garven

    Changes required:

    • Shutdown requests
    • Guild count aggregation
    feature 
    opened by Skelmis 2
  • feat: anonymous suggestions

    feat: anonymous suggestions

    Summary

    This pull request adds the ability to submit anonymous suggestions

    Checklist

    • [x] Has been manually tested
    • [ ] Has unit-tests, if applicable
    • [x] New features have attached cooldowns
    • [x] Any new strings are localized correctly
    • [x] These work on both new and old style suggestions
    • [x] All interactions have been deferred
    feature 
    opened by Skelmis 1
  • refactor: statistics gathering

    refactor: statistics gathering

    The current approach to statistics gathering takes up a lot of space and looks like

    member_stats: MemberStats = await MemberStats.from_id(
                interaction.author.id, interaction.guild_id, self.state
            )
            member_stats.approve_by_message_command.completed_at.append(self.state.now)
            await self.state.member_stats_db.upsert(member_stats, member_stats)
            await self.stats.log_stats(
                interaction.author.id,
                interaction.guild_id,
                self.stats.type.APPROVE_BY_MESSAGE_COMMAND,
            )
    

    I feel this could be shortened dramatically with a helper method

    improvement 
    opened by Skelmis 1
  • feat: add the ability to see who voted for suggestions

    feat: add the ability to see who voted for suggestions

    Partially resolves #15

    This PR introduces the following 4 new responses: https://gyazo.com/00cfebf5330c462d4179392f8390b71e

    • [X] Manual testing
    • [X] Handle both types of suggestions
    • [X] Ratelimit the commands
    • [ ] Write unit-tests
    • [x] Add strings to locales files
    • [x] Finalize sign off from Anthony for command names + UI look

    This also improves the error given when SuggestionNotFound is raised as a side affect to be dynamically shown based on the raisee itself instead of hard-coded.

    feature 
    opened by Skelmis 1
  • bug: Guild.icon.url throwing AttributeError

    bug: Guild.icon.url throwing AttributeError

    In order to future proof this being none, rather then needing to guard anywhere it's used we should simply ensure that the lookup path always exists and simply have it default to none

    bug 
    opened by Skelmis 1
  • refactor: clean up suggestions closure

    refactor: clean up suggestions closure

    Currently when a suggestion is closed (approved, rejected, clear to an extent) we then need to call many methods in any place it occurs. It'd be nice to abstract this to something like Suggestion.close(...) so that if future methods are added its really simple to modify

    improvement 
    opened by Skelmis 0
  • refactor: move cursors to Alaric from raw motor

    refactor: move cursors to Alaric from raw motor

    Summary

    Updates our database interactions to use new syntax

    Checklist

    • [ ] Has been manually tested
    • [ ] Has unit-tests, if applicable
    • [ ] New features have attached cooldowns
    • [ ] Any new strings are localized correctly
    • [ ] These work on both new and old style suggestions
    • [ ] All interactions have been deferred
    opened by Skelmis 0
  • feat: add error persistence

    feat: add error persistence

    Summary

    Adds the ability to persist errors for help at later stages without the need to open the server logs to debug whats happened

    Closes #27

    Checklist

    • [x] Has been manually tested
    • [ ] Has unit-tests, if applicable
    • [ ] New features have attached cooldowns
    • [x] Any new strings are localized correctly
    • [x] These work on both new and old style suggestions
    • [ ] All interactions have been deferred
    feature 
    opened by Skelmis 0
  • feat: Slash commands for viewing suggestion voters

    feat: Slash commands for viewing suggestion voters

    The only way to view voters on a suggestion is via message commands. However, restrictions apply based on the permissions of the suggestions channel (ex. our recommended setup). To use message commands, the SEND_MESSAGES permission is required.

    In this instance, the slash command will work the same as its message command counterpart; however, it'll just be one voters command. I have some examples below:

    Command: /voters [filter:all|upvoters|downvoters]

    • /voters filter:all - display all voters
    • /voters filter:downvoters - display all downvoters
    feature 
    opened by acollierr17 0
  • ci: check for duplicated method names

    ci: check for duplicated method names

    It's happened a couple times in the past where we have duplicated methods names so we should add a check for it to make sure it doesn't happen again in the future

    improvement 
    opened by Skelmis 0
  • bug: duplicated id's due to a lack of stateful sharing

    bug: duplicated id's due to a lack of stateful sharing

    Currently we endeavor to make unique id's by checking for existence within an in memory set, however, given distribution across clusters this set only remains up to date for the given process and is not updated to match other clusters. Luckily this is validated at the database level as well however we should ideally do something to avoid this becoming a possible issue down the line.

    Options: 1: Update the set periodically inline with the database. This however only minimizes the issue and does not remove it fully

    2: Move ID generation to a separate service such as Garven which acts independently and doesn't need to worry about state issues as it handles ids for all clusters

    Option 2 is likely the better solution in terms of future proofing

    improvement 
    opened by Skelmis 1
Releases(v2.12.0)
Owner
Suggestions
The only suggestions bot you'll ever need. Simple usage and management of suggestions for public and staff use.
Suggestions
A community Discord bot testnet faucet for thirdweb community. 💻🌏

Thirdweb Faucet (Discord Bot) ?? Nominate (@WarenGonzaga) as GitHub Star. If you appreciate his hardwork and dedication to open source. A dedicated Di

Waren Gonzaga 4 Aug 6, 2022
Co-Pilot is a discord Bot designed to be the all-in-one, open-source Discord bot that handles all your server needs.

Welcome to Co-Pilot Bot repo! ?? ?? Co-Pilot (All-in-one Discord Bot) Co-Pilot is a discord Bot designed to be the all-in-one, open-source Discord bot

YMafalha 19 Nov 11, 2022
Discord-Bot - You can use the discord bot codes that are updated in every video of the codes I use in the discord bot making series that I have published on my youtube channel.

Discord-Bot You can use the discord bot codes that are updated in every video of the codes I use in the discord bot making series that I have publishe

Umut Bayraktar 114 Jan 3, 2023
A multipurpose bot, a clan bot, a all in one bot. The one bot u need for ur server originally made as Milrato discord Bot and by Tomato6966.

Public Bot and Support Server! Invite the Public Version of this Bot so you don't need to host it by yourself or join my Discord server to get a custo

Tomato6966 472 Dec 25, 2022
Mabicord AIO is a Discord bot that handles MMORPG Mabinogi's bugle messages, designed to serve a single Discord server.

Welcome to NamVr Discord Bot Template ?? An open source discord.js bot template which is based on official discord.js guide to get started on making y

Shane Lx 2 Jul 13, 2022
The Discord Bot for the AvdanOS Community Discord server.

Tinan The Discord Bot for the AvdanOS Community Discord server, made using discord.js v13.8. How to contribute Forking Step 1: Make a contribution for

AvdanOS 11 Dec 1, 2022
Gitlift Discord Bot is a discord bot which is listening Discord Messages to reply with user gitlift profile and total contributions.

Remoklify - Gitlift Discord Bot Gitlift Discord Bot is a discord bot which is listening Discord Messages to reply with user gitlift profile and total

Remoklify 3 Mar 20, 2022
About Discord bot draft that does not contain ready-made commands, compatible with discord.js v14. Create your own discord bot with this command handler.

discordJS-V14 About Discord bot draft that does not contain ready-made commands, compatible with discord.js v14. Create your own discord bot with this

Umut Bayraktar 36 Dec 28, 2022
A multi-purpose assistant bot for Discord to make your server a better place.

━━━━━━ ❖ ━━━━━━ Rieko ?? FEATURES To be filled. ?? TIP JAR If you enjoyed it and would like to show your appreciation, you may want to tip me here. It

Jan Leigh Muñoz 3 May 23, 2022
A Discord bot designed for taking self-hosted media server requests from users

Jellybot A Discord bot designed for taking self-hosted media server requests from users What's it for? If you're coming across this, you probably have

null 2 Mar 25, 2022
Skarbówka is a discord bot that is designed to waste your time on some stupid economy commands.

SKARBÓWKA - A shitty discord bot that you don't need Invite the bot It's a discord bot that has economy and casino commands that you can use in case o

Confuze 3 Sep 9, 2022
An open source community powered Discord bot to stop and remove the trash from the SW workshop.

SW Anti Reuploads & Trash Discord bot An open source community powered Discord bot to stop and remove the trash from the SW workshop. SW Discord · Cre

SIMPLE MARK 4 Jun 20, 2022
[WIP] Meet Koshiro! Our official Discord Bot, Open Source and Community builded. 🛸

Koshiro Meet Koshiro! Our official Discord Bot, Open Source and Community builded. ?? Getting Started Clone the repository git clone https://github.co

WebX DAO 5 Nov 19, 2022
This is discord bot specifically made for Community Classroom

Classroom Monitor Bot This bot provides functionalities for 'Community Classroom' discord server. Community Classroom is an initiative 'for the studen

Kaiwalya Koparkar 0 Apr 10, 2022
A configurable Discord Community server nuking bot with a small twist.

Quby Bot A configurable Discord Community server nuking bot with a small twist. The bot will perform these actions in the following order: When the bo

Oliver B 3 Sep 7, 2022
Discord community bot for genicsblog.com

genics-bot Source code of discord bot for the genicsblog.com community. Local setup Clone the repo and cd: git clone https://github.com/genicsblog/gen

Genics Blog 5 Oct 3, 2022
OpenAI Discord Community's GPT-3 powered DALL·E 2 support bot

DALL·E Discord Bot OpenAI Discord Community's GPT-3 powered DALL·E 2 support bot This repository hosts the code for the OpenAI Discord Community's GPT

OpenAI 31 Nov 16, 2022
Denky is a multipurpose Discord bot, build with Node.js, TypeScript and discord.js.

?? Denky Bot Denky is a brazilian Discord bot, build with Node.js, TypeScript and discord.js. ⚙️ How to Create a Discord application. Guide Install No

Davi Patricio 8 Apr 6, 2022
A simple & easy2use API for obtaining information about a discord user, discord bot or discord guild and their use for some purpose on websites!

discord-web-api A simple & easy2use API for obtaining information about a discord user, discord bot or discord guild and their use for some purpose on

InvalidLenni 2 Jun 28, 2022