• Stars
    star
    335
  • Rank 125,904 (Top 3 %)
  • Language
    JavaScript
  • License
    MIT License
  • Created over 5 years ago
  • Updated 7 months ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

🎉 Complete framework to facilitate the creation of giveaways using discord.js

Discord Giveaways

discordBadge downloadsBadge versionBadge documentationBadge

Discord Giveaways is a powerful Node.js module that allows you to easily create giveaways!

Features

  • ⏱️ Easy to use!
  • 🔄 Automatic restart after bot crash!
  • 🇫🇷 Support for translations: adapt the strings for your own language!
  • 📁 Support for all databases! (default is json)
  • ⚙️ Very customizable! (prize, duration, winners, ignored permissions, bonus entries, etc...)
  • 🚀 Super powerful: start, edit, reroll, end, delete and pause giveaways!
  • 💥 Events: giveawayEnded, giveawayRerolled, giveawayDeleted, giveawayReactionAdded, giveawayReactionRemoved, endedGiveawayReactionAdded
  • 🕸️ Support for shards!
  • and much more!

Installation

npm install --save discord-giveaways

Examples

You can read this example bot on GitHub: discord-giveaways-bot

Launch of the module

Required Discord Intents: Guilds and GuildMessageReactions.
Optional Discord Privileged Intent for better performance: GuildMembers.

const Discord = require('discord.js');
const client = new Discord.Client({
    intents: [
        Discord.IntentsBitField.Flags.Guilds,
        Discord.IntentsBitField.Flags.GuildMessageReactions,
        Discord.IntentsBitField.Flags.GuildMembers // Optional, for better performance
    ]
});

// Requires Manager from discord-giveaways
const { GiveawaysManager } = require('discord-giveaways');
const manager = new GiveawaysManager(client, {
    storage: './giveaways.json',
    default: {
        botsCanWin: false,
        embedColor: '#FF0000',
        embedColorEnd: '#000000',
        reaction: '🎉'
    }
});
// We now have a giveawaysManager property to access the manager everywhere!
client.giveawaysManager = manager;

client.on('ready', () => {
    console.log('Bot is ready!');
});

client.login(process.env.DISCORD_BOT_TOKEN);

After that, giveaways that are not yet completed will start to be updated again and new giveaways can be started. You can pass an options object to customize the giveaways. Here is a list of them:

Start a giveaway

client.on('interactionCreate', (interaction) => {
    const ms = require('ms');

    if (interaction.isChatInputCommand() && interaction.commandName === 'start') {
        // /start 2d 1 Awesome prize!
        // Will create a giveaway with a duration of two days, with one winner and the prize will be "Awesome prize!"

        const duration = interaction.options.getString('duration');
        const winnerCount = interaction.options.getInteger('winners');
        const prize = interaction.options.getString('prize');

        client.giveawaysManager
            .start(interaction.channel, {
                duration: ms(duration),
                winnerCount,
                prize
            })
            .then((data) => {
                console.log(data); // {...} (messageId, end date and more)
            });
        // And the giveaway has started!
    }
});

This allows you to start a new giveaway. Once the start() function is called, the giveaway starts, and you only have to observe the result, the package does the rest!

ATTENTION!

The command examples below (reroll, edit delete, end) can be executed on any server your bot is a member of if a person has the prize or the messageId of a giveaway. To prevent abuse we recommend to check if the prize or the messageId that was provided by the command user is for a giveaway on the same server, if it is not, then cancel the command execution.

const query = interaction.options.getString('query');
const giveaway =
    // Search with giveaway prize
    client.giveawaysManager.giveaways.find((g) => g.guildId === interaction.guildId && g.prize === query) ||
    // Search with messageId
    client.giveawaysManager.giveaways.find((g) => g.guildId === interaction.guildId && g.messageId === query);

// If no giveaway was found
if (!giveaway) return interaction.reply(`Unable to find a giveaway for \`${query}\`.`);

Reroll a giveaway

client.on('interactionCreate', (interaction) => {
    if (interaction.isChatInputCommand() && interaction.commandName === 'reroll') {
        const messageId = interaction.options.getString('message_id');
        client.giveawaysManager
            .reroll(messageId)
            .then(() => {
                interaction.reply('Success! Giveaway rerolled!');
            })
            .catch((err) => {
                interaction.reply(`An error has occurred, please check and try again.\n\`${err}\``);
            });
    }
});
  • options.winnerCount: the number of winners to pick.
  • options.messages: an object with the "congrat" and the "error" message. Usage example.
  • options.messages.replyWhenNoWinner: Whether or not to send the "error" message when there is no winner.

Edit a giveaway

client.on('interactionCreate', (interaction) => {
    if (interaction.isChatInputCommand() && interaction.commandName === 'edit') {
        const messageId = interaction.options.getString('message_id');
        client.giveawaysManager
            .edit(messageId, {
                addTime: 5000,
                newWinnerCount: 3,
                newPrize: 'New Prize!'
            })
            .then(() => {
                interaction.reply('Success! Giveaway updated!');
            })
            .catch((err) => {
                interaction.reply(`An error has occurred, please check and try again.\n\`${err}\``);
            });
    }
});

Note: to reduce giveaway duration, define addTime with a negative number! For example addTime: -5000 will reduce giveaway duration by 5 seconds!

Delete a giveaway

client.on('interactionCreate', (interaction) => {
    if (interaction.isChatInputCommand() && interaction.commandName === 'delete') {
        const messageId = interaction.options.getString('message_id');
        client.giveawaysManager
            .delete(messageId)
            .then(() => {
                interaction.reply('Success! Giveaway deleted!');
            })
            .catch((err) => {
                interaction.reply(`An error has occurred, please check and try again.\n\`${err}\``);
            });
    }
});
  • doNotDeleteMessage: whether the giveaway message shouldn't be deleted.

⚠️ Note: when you use the delete function, the giveaway data and the message of the giveaway are deleted (by default). You cannot restore a giveaway once you have deleted it!

End a giveaway

client.on('interactionCreate', (interaction) => {
    if (interaction.isChatInputCommand() && interaction.commandName === 'end') {
        const messageId = interaction.options.getString('message_id');
        client.giveawaysManager
            .end(messageId)
            .then(() => {
                interaction.reply('Success! Giveaway ended!');
            })
            .catch((err) => {
                interaction.reply(`An error has occurred, please check and try again.\n\`${err}\``);
            });
    }
});
  • noWinnerMessage: Sent in the channel if there is no valid winner for the giveaway. Message Options

Pause a giveaway

client.on('interactionCreate', (interaction) => {
    if (interaction.isChatInputCommand() && interaction.commandName === 'pause') {
        const messageId = interaction.options.getString('message_id');
        client.giveawaysManager
            .pause(messageId)
            .then(() => {
                interaction.reply('Success! Giveaway paused!');
            })
            .catch((err) => {
                interaction.reply(`An error has occurred, please check and try again.\n\`${err}\``);
            });
    }
});
  • options.content: the text of the embed when the giveaway is paused. You can access giveaway properties.
  • options.unpauseAfter: the number of milliseconds, or a timestamp in milliseconds, after which the giveaway will automatically unpause.
  • options.embedColor: the color of the embed when the giveaway is paused.
  • options.infiniteDurationText: The text that gets displayed next to GiveawayMessages#drawing in the paused embed, when there is no unpauseAfter.
    ^^^ You can access giveaway properties.

⚠️ Note: the pause function overwrites/edits the pauseOptions object property of a giveaway!

Unpause a giveaway

client.on('interactionCreate', (interaction) => {
    if (interaction.isChatInputCommand() && interaction.commandName === 'unpause') {
        const messageId = interaction.options.getString('message_id');
        client.giveawaysManager
            .unpause(messageId)
            .then(() => {
                interaction.reply('Success! Giveaway unpaused!');
            })
            .catch((err) => {
                interaction.reply(`An error has occurred, please check and try again.\n\`${err}\``);
            });
    }
});

Fetch giveaways

// A list of all the giveaways
const allGiveaways = client.giveawaysManager.giveaways; // [ {Giveaway}, {Giveaway} ]

// A list of all the giveaways on the server with Id "1909282092"
const onServer = client.giveawaysManager.giveaways.filter((g) => g.guildId === '1909282092');

// A list of the current active giveaways (not ended)
const notEnded = client.giveawaysManager.giveaways.filter((g) => !g.ended);

Exempt Members

Function to filter members. If true is returned, the member will not be able to win the giveaway.

client.giveawaysManager.start(interaction.channel, {
    duration: 60000,
    winnerCount: 1,
    prize: 'Free Steam Key',
    // Only members who have the "Nitro Boost" role are able to win
    exemptMembers: (member, giveaway) => !member.roles.cache.some((r) => r.name === 'Nitro Boost')
});

Note (only for proficients): if you want to use values of global variables inside of the function without using giveaway.extraData, you can use the Function constructor:

const roleName = 'Nitro Boost';

client.giveawaysManager.start(interaction.channel, {
    duration: 60000,
    winnerCount: 1,
    prize: 'Free Steam Key',
    // Only members who have the the role which is assigned to "roleName" are able to win
    exemptMembers: new Function(
        'member',
        'giveaway',
        `return !member.roles.cache.some((r) => r.name === '${roleName}')`
    )
});

Note

  • You can use this, instead of the giveaway parameter, inside of the function string to access anything of the giveaway instance.
    For example: this.extraData, or this.client.
  • Strings have to be "stringified" (wrapped in quotation marks) again like you can see in the example.
    Array brackets also have to be stated again.
  • Global variables which contain numbers with more than 16 digits cannot be used.
    => Snoflakes have to be "stringified" correctly to avoid misbehaviour.
  • If you want to make an asynchronous function in this format, refer to this article.
  • Because of those various complications it is therefore highly suggested to use giveaway.extraData for storing variables.
    But if you really want to do it in this way and need more information/help, please visit the Discord Server.

Last Chance

client.giveawaysManager.start(interaction.channel, {
    duration: 60000,
    winnerCount: 1,
    prize: 'Discord Nitro!',
    lastChance: {
        enabled: true,
        content: '⚠️ **LAST CHANCE TO ENTER !** ⚠️',
        threshold: 10_000,
        embedColor: '#FF0000'
    }
});
  • lastChance.enabled: if the last chance system is enabled.
  • lastChance.content: the text of the embed when the last chance system is enabled.
    ^^^ You can access giveaway properties.
  • lastChance.threshold: the number of milliseconds before the giveaway ends when the last chance system will be enabled.
  • lastChance.embedColor: the color of the embed when last chance is enabled.

Pause Options

client.giveawaysManager.start(interaction.channel, {
    duration: 60000,
    winnerCount: 1,
    prize: 'Discord Nitro!',
    pauseOptions: {
        isPaused: true,
        content: '⚠️ **THIS GIVEAWAY IS PAUSED !** ⚠️',
        unpauseAfter: null,
        embedColor: '#FFFF00',
        infiniteDurationText: '`NEVER`'
    }
});
  • pauseOptions.isPaused: if the giveaway is paused.
  • pauseOptions.content: the text of the embed when the giveaway is paused.
    ^^^ You can access giveaway properties.
  • pauseOptions.unpauseAfter: the number of milliseconds, or a timestamp in milliseconds, after which the giveaway will automatically unpause.
  • pauseOptions.embedColor: the color of the embed when the giveaway is paused.
  • pauseOptions.infiniteDurationText: The text that gets displayed next to GiveawayMessages#drawing in the paused embed, when there is no unpauseAfter.
    ^^^ You can access giveaway properties.

Bonus Entries

client.giveawaysManager.start(interaction.channel, {
    duration: 60000,
    winnerCount: 1,
    prize: 'Free Steam Key',
    bonusEntries: [
        {
            // Members who have the "Nitro Boost" role get 2 bonus entries
            bonus: (member, giveaway) => (member.roles.cache.some((r) => r.name === 'Nitro Boost') ? 2 : null),
            cumulative: false
        }
    ]
});
  • bonusEntries[].bonus: the filter function that takes two parameters: "member" and "giveaway", and returns the amount of additional entries.
  • bonusEntries[].cumulative: if the amount of entries from the function can get summed with other amounts of entries.

Note (only for proficients): if you want to use values of global variables inside of the function without using giveaway.extraData, you can use the Function constructor.
Look at the exemptMembers section for more information on that.

Message Options

Options are available for the following messages:
GiveawayStartOptions#GiveawayMessages#winMessage, GiveawayRerollOptions#messages#congrat, GiveawayRerollOptions#messages#error and client.giveawaysManager.end(messageId, noWinnerMessage).

You can access giveaway properties in all embed or component properties that are a string.

The format, including all currently available options, looks like this:

message: {
    content: '',
    embed: new Discord.EmbedBuilder(),
    components: [new Discord.ActionRowBuilder()],
    replyToGiveaway: true
}

Note: When sending a component, content or embed is required.

Access giveaway properties in messages

You can access any giveaway property inside of giveaway messages with the format: {this.<property>}.
For example:

winMessage: 'Congratulations, {winners}! You won **{this.prize}**!\n{this.messageURL}'

Also, you can write JavaScript code inside of {}.
For example:

winMessage: 'Congratulations, {winners}! You won **{this.prize.toUpperCase()}**!\n{this.messageURL}'

If you want to fill in strings that are not messages of a giveaway, or just custom embeds, then you can use giveaway.fillInString(string) for strings, giveaway.fillInEmbed(embed) for embeds and giveaway.fillInComponents(embed) for components.

🇫🇷 Translation

You can also pass a messages parameter for the start() function, if you want to translate the giveaway texts:

  • options.messages.giveaway: the message that will be displayed above the embeds.
  • options.messages.giveawayEnded: the message that will be displayed above the embeds when the giveaway is ended.
  • options.messages.title: the title of the giveaway embed. Will default to the prize of the giveaway if the value is not a string.
  • options.messages.drawing: the message that displays the drawing timestamp.
  • options.messages.dropMessage: the message that will be displayed for drop giveaways.
  • options.messages.inviteToParticipate: the message that invites users to participate.
  • options.messages.winMessage: the message that will be displayed to congratulate the winner(s) when the giveaway is ended.
    ^^^ Message options are available in this message.
  • options.messages.embedFooter: the message displayed at the bottom of the main (not ended) embed.
    ^^^ An empty string can be used for "deactivation", or iconURL can be set.
  • options.messages.noWinner: the message that is displayed if no winner can be drawn.
  • options.messages.hostedBy: the message to display the host of the giveaway.
  • options.messages.winners: simply the expression "Winner(s):" in your language.
  • options.messages.endedAt: simply the words "Ended at" in your language.

For example:

const duration = interaction.options.getString('duration');
const winnerCount = interaction.options.getInteger('winners');
const prize = interaction.options.getString('prize');

client.giveawaysManager.start(interaction.channel, {
    duration: ms(duration),
    winnerCount,
    prize,
    messages: {
        giveaway: '🎉🎉 **GIVEAWAY** 🎉🎉',
        giveawayEnded: '🎉🎉 **GIVEAWAY ENDED** 🎉🎉',
        title: '{this.prize}',
        drawing: 'Drawing: {timestamp}',
        dropMessage: 'Be the first to react with 🎉 !',
        inviteToParticipate: 'React with 🎉 to participate!',
        winMessage: 'Congratulations, {winners}! You won **{this.prize}**!\n{this.messageURL}',
        embedFooter: '{this.winnerCount} winner(s)',
        noWinner: 'Giveaway cancelled, no valid participations.',
        hostedBy: 'Hosted by: {this.hostedBy}',
        winners: 'Winner(s):',
        endedAt: 'Ended at'
    }
});

You can access giveaway properties in all these messages.

And for the reroll() function:

client.giveawaysManager.reroll(messageId, {
    messages: {
        congrat: ':tada: New winner(s): {winners}! Congratulations, you won **{this.prize}**!\n{this.messageURL}',
        error: 'No valid participations, no new winner(s) can be chosen!'
    }
});
  • options.messages.congrat: the congratulatory message.
  • options.messages.error: the error message if there is no valid participant.

You can access giveaway properties in these messages.
Message options are available in these messages.

Custom Database

You can use your custom database to save giveaways, instead of the json files (the "database" by default for discord-giveaways).
For this, you will need to extend the GiveawaysManager class, and replace some methods with your custom ones.
There are 4 methods you will need to replace:

  • getAllGiveaways: this method returns an array of stored giveaways.
  • saveGiveaway: this method stores a new giveaway in the database.
  • editGiveaway: this method edits a giveaway already stored in the database.
  • deleteGiveaway: this method deletes a giveaway from the database (permanently).

⚠️ All the methods should be asynchronous to return a promise!

SQL examples

NoSQL examples

More Repositories

1

AtlantaBot

🤖 Another powerful Discord Bot with a web-dashboard used by more than 130k users!
JavaScript
845
star
2

discord-data-package-explorer

🌀 What's really in your Discord Data package?
Svelte
828
star
3

discord-player

🎧 Complete framework to simplify the implementation of music commands using discord.js v14
TypeScript
527
star
4

discord-backup

📦 Complete framework to facilitate server backup using discord.js v13
TypeScript
411
star
5

scratch-for-discord

🐱Create your own Discord Bot easily using Scratch-styled blocks! Made with Vue.js
JavaScript
341
star
6

discord-logs

📝Framework that simplify the usage of advanced Discord logs
TypeScript
243
star
7

discord-music-bot

The perfect music bot for your Discord server! 🤘
JavaScript
238
star
8

discord-giveaways-bot

🎁Giveways Bot using the discord-giveaways package
JavaScript
201
star
9

insta.js

💬 Object-oriented library for sending and receiving messages via Instagram
JavaScript
137
star
10

slash-commands-gui

GUI tool to explore Slash Commands of your bot, built on Vue 3 and TailwindCSS 🚀
Vue
131
star
11

vinted-discord-bot

🔔 BOT Discord qui envoie un message quand un nouvel article est publié sur Vinted (selon certains critères)
TypeScript
115
star
12

discord-temp-channels

Simple framework to facilitate the creation of a temporary voice channels system using Discord.js
TypeScript
113
star
13

DiscordYoutubeNotifier

Be notified when one of your favorite youtubers posts a video!
JavaScript
100
star
14

discord-invites-tracker

🐕 Track Discord invites to know who invited who and with which invite!
TypeScript
94
star
15

DiscordEconomyBot

A very simple bot with an economy system using the Discord.js API
JavaScript
87
star
16

vinted-api

JavaScript library to interact with the Vinted API
JavaScript
84
star
17

backups-bot

🌟 Backups Bot using the discord-backup package
JavaScript
78
star
18

minecraft-discord-bot

📊View the status and statistics of your MC server directly on Discord!
JavaScript
65
star
19

stripe-discord-bot

Discord bot to give a role to users paying a Stripe subscription
TypeScript
39
star
20

node-ecole-directe

Connexion à école directe sans passer par l'interface web!
JavaScript
38
star
21

instaddict

💊  How addicted are you to Instagram?
Svelte
37
star
22

paypal-bot

Générez des liens de factures et acceptez des paiements sur Discord!
CSS
32
star
23

pronote-bot

😎 Chatbot Instagram pour Pronote
JavaScript
30
star
24

paypal-api

💰Node.js package to interact with PayPal REST API
TypeScript
30
star
25

discord-bot-template

Custom Discord Bot template for my bots 🚀
TypeScript
29
star
26

discord-sync-commands

Easily keep your bot's slash commands synchronized with Discord
JavaScript
28
star
27

pronote-bot-discord

Un bot Discord pour envoyer les nouveaux devoirs dans un serveur Discord 📚
JavaScript
26
star
28

easy-json-database

📂 Easy to use json database. Used for Scratch For Discord.
JavaScript
26
star
29

tiktok-discord-bot

Simple Discord Bot that sends notifications on new TikTok posts
JavaScript
23
star
30

Sworder-Dashboard.io

🌐 Discord bot dashboard created by Sworder71
HTML
23
star
31

discbot.js

🚀 Powerful discord bot template, for a solid structure!
JavaScript
22
star
32

multilingual-discord-bot

A multilingual discord bot
JavaScript
22
star
33

nfts-discord-bot

✨ Get notified when an item is sold or listed on Solanart and MagicEden!
JavaScript
19
star
34

status

📈 Uptime monitor and status page for Upptime, powered by @upptime
Markdown
18
star
35

auto-github-bio

📚Automatized Github biography using openweathermap.org API
Python
18
star
36

simsimi-bot

Simsimi Discord Bot - The most clever chatbot
CoffeeScript
17
star
37

twitchdl

Download videos (and sub-only videos) from Twitch
JavaScript
16
star
38

arduino-is-mybot-online

🚨 Simple status LED with Arduino to alert you if your bot is down!
C++
13
star
39

pronote-qrcode-api

🧪 Stuff about Pronote QRCodes to connect using a mobile phone
JavaScript
13
star
40

AutoBanSelfbots

A bot that automatically detects selfbots and ban them
JavaScript
12
star
41

stop-fake-discord-friends

JavaScript
11
star
42

blog.androz2091.fr

✏️ My personal blog, built with Gatsby 2
MDX
11
star
43

wot-stats-bot

Discord bot that displays your World Of Tanks stats!
JavaScript
11
star
44

twittycord

Open source online service to verify Discord users social connections
TypeScript
10
star
45

AndrozDevBot

Official bot for the AndrozDev server
JavaScript
9
star
46

my-insta-stats

🚧 Instagram version of Discord Data Package Explorer. Under development.
Svelte
9
star
47

github-issues-discord-bot

Convert Discord messages to GitHub issues!
TypeScript
9
star
48

Atlantav2

The V2 of Atlanta. Don't judge please.
JavaScript
8
star
49

rockstar-games-status

Simple package to get the current status of Rockstar Games services
JavaScript
8
star
50

npm-files-explorer

Adds a button to browse files of a package on NPM
JavaScript
8
star
51

atlanta-emojis-mod

Moderator bot for the Atlanta Emojis servers
JavaScript
7
star
52

deno-diswho

Deno port of Diswho
JavaScript
7
star
53

androz2091.fr

👋 My personal website
HTML
6
star
54

Cicero

Great speaker, Cicero is a text-to-speech Discord Bot!
TypeScript
6
star
55

neko-love

🐱A Neko Love API wrapper !
TypeScript
6
star
56

floor-price-bot

Powerful bot that fetches floor prices from OpenSea and send them on Discord 🚀
TypeScript
6
star
57

disable-discord-notifications

Script that disable notifications for each of your servers
JavaScript
6
star
58

Androz2091

6
star
59

k8s-infrastructure

🕸️ 🚀 My personal server infrastructure - kubernetes cluster - ArgoCD, Longhorn, Kubeseal, Caddy
Shell
6
star
60

chess-ai-discord-bot

JavaScript
5
star
61

easy-discord-commands

Simple framework to create commands using Discord.js
TypeScript
5
star
62

pixpay-api

🏦 Reverse engineering of the PixPay Private API
JavaScript
5
star
63

fiverr-hmsip

Fiverr, How Much Should I Pay? chrome extension
JavaScript
5
star
64

dotapps

Exhaustive list of all the apps I use on my different devices
Ruby
5
star
65

androz2091-cors-anywhere

My own cors-anywhere proxy server
JavaScript
5
star
66

backups-manager

⚡ Gère vos fichiers de sauvegarde de manière intelligente.
Ruby
5
star
67

sleepingmoney-pushover

Realtime notifications from SleepingMoney using Pushover 🌩️
JavaScript
5
star
68

chatgpt-data-package-explorer

Get statistics about your ChatGPT usage
JavaScript
5
star
69

bereal-api

4
star
70

funcraft

🌐 Scrape data from funcraft.net easily!
JavaScript
4
star
71

plex.js

4
star
72

cloudflare-page-rules

Simple package to update cloudflare page rules dynamically
JavaScript
4
star
73

steam-usernames-scraper

Check a list of Steam usernames
JavaScript
4
star
74

diswho

Simple API to get information about a Discord user or a Discord invite
Go
4
star
75

arte-dl

Download ARTE.tv videos online, for free without any ads
HTML
4
star
76

blague.xyz

Wrapper pour Blague.xyz (blagues aléatoires, blague du jour, etc...)
TypeScript
4
star
77

marche-pala-bot

Le bot pour le serveur Marché Paladium | Paladium | V6
JavaScript
3
star
78

voice-user-bots

TypeScript
3
star
79

slowmode-discord-bot

🐌 Discord bot that allows you to set slowmodes in specific channels of your server
TypeScript
3
star
80

opm-partners-api

TypeScript
3
star
81

coders-bot

Coder's bot, a discord bot for developers written in V
V
3
star
82

export-my-fiverr-orders

JavaScript
3
star
83

milou

🐶🐶
EJS
3
star
84

bento-custom-domain

JavaScript
3
star
85

tradingview-bot

JavaScript
2
star
86

cyanide-happiness-bot

Bot pour le Discord Cyanide and Happiness VF
JavaScript
2
star
87

customgpt-discord-bot

JavaScript
2
star
88

expressio.fr

Obtenez des expressions aléatoires de expressio.fr
JavaScript
2
star
89

ljdc-bot

Un bot Discord qui affiche une image aléatoire du site lesjoiesducode.fr
JavaScript
2
star
90

ohorime

ohorime bot
JavaScript
2
star
91

imgur-app

Simple Flutter app to browse your imgur images
Dart
2
star
92

discord-code-generator

HTML
2
star
93

hello-world

JavaScript
2
star
94

kevintrades-discord-bot

TypeScript
2
star
95

discord-asker

A very simple package to easily use Discord collectors
2
star
96

liste-celebrites

Une liste de ~150 célébrités, dont certaines françaises, au format JSON.
2
star
97

kampios-discord-bot

TypeScript
2
star
98

slowmode-discordeno-bot

🐌 Slowmode Discord Bot rewritten for Deno
TypeScript
2
star
99

beefast

App iOS native pour comprendre comment fonctionne Storyboard, Xcode et les bases du Swift.
Swift
2
star
100

discord-whook.js

A simple discord webhook wrapper.
JavaScript
2
star