JSPM

  • Created
  • Published
  • Downloads 2827
  • Score
    100M100P100Q119863F
  • License MIT

A complete framework to facilitate the creation of giveaways using discord.js

Package Exports

  • discord-giveaways

This package does not declare an exports field, so the exports above have been automatically detected and optimized by JSPM instead. If any package subpath is missing, it is recommended to post an issue to the original package (discord-giveaways) to support the "exports" field. If that is not possible, create a JSPM override to customize the exports field for this package.

Readme

discord-giveaways

A complete framework to facilitate the creation of giveaways using discord.js

Discord Giveaways

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

  • The duration of the Giveaway is customizable!
  • Automatic restart after bot crash
  • Update of the timer every X seconds!
  • The strings are fully customizable so you can adapt them to your language!
  • And customizable prize, customizable number of winners, customizable ignored members, and more!

Installation

npm install --save discord-giveaways

Changelog

  • 2.0.0 Full code update
  • 2.0.2 Fix error DiscordAPIError: Invalid Form Body embed.timestamp
  • 2.0.3 Add fetch() function to get the complete list of the giveaways

Examples

Launch of the module

const Discord = require("discord.js"),
giveaways = require("discord-giveaways"),
client = new Discord.Client(),
settings = {
    prefix: "g!",
    token: "Your Discord Token"
};

client.on("ready", () => {
    console.log("I'm ready !");
    giveaways.launch(client, {
        updateCountdownEvery: 5000,
        botsCanWin: false,
        ignoreIfHasPermission: [
            "MANAGE_MESSAGES",
            "MANAGE_GUILD",
            "ADMINISTRATOR"
        ],
        embedColor: "#FF0000",
        reaction: "šŸŽ‰"
    });
});

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

  • client: the discord client (your discord bot instance)
  • options.updateCountdownEvery: the number of seconds it will take to update the timers
  • options.botsCanWin: whether the bots can win a giveaway
  • options.ignoreIfHasPermission: an array of discord permissions. Members who have at least one of these permissions will not be able to win a giveaway even if they react to it.
  • options.embedColor: a hexadecimal color for the embeds of giveaways.
  • options.reaction: the reaction that users will have to react to in order to participate!

Start a giveaway

client.on("message", (message) => {

    const ms = require("ms"); // npm install ms
    const args = message.content.slice(settings.prefix.length).trim().split(/ +/g);
    const command = args.shift().toLowerCase();

    if(command === "start-giveaway"){
        // g!start-giveaway 2d 1 Awesome prize !
        // will create a giveaway with a duration of two days, with one winner and the prize will be "Awesome prize"

        giveaways.start(message.channel, {
            time: ms(args[0]),
            prize: args.slice(2).join(" "),
            winnersCount: parseInt(args[1])
        }).then((gData) => {
            console.log(gData); // {...} (messageid, end date and more)
        });
        // And the giveaway is started!
    }
});

options.time: the giveaway duration options.prize: the giveaway prize options.winnersCount: the number of giveaway winners

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

Fetch the giveaways

    // The list of all the giveaways
    let allGiveaways = giveaways.fetch();

    // The list of all the giveaways on the server with ID "1909282092"
    let onServer = allGiveaways.filter((g) => g.guildID === "1909282092");

    // The list of the current giveaways (not ended)
    let notEnded = allGiveaways.filter((g) => !g.ended);

šŸ‡«šŸ‡· Translation

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

  • 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 terminated
  • options.messages.timeRemaining: the message that displays the remaining time (the timer)
  • 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 terminated
  • options.messages.embedFooter: the message displayed at the bottom of the embeds
  • options.messages.noWinner: the message that is displayed if no winner can be drawn
  • options.messages.winners: simply the word "winner" in your language
  • options.messages.endedAt: simply the words "Ended at" in your language
  • options.messages.units.seconds: simply the word "seconds" in your language
  • options.messages.units.minutes: simply the word "minutes" in your language
  • options.messages.units.hours: simply the word "hours" in your language
  • options.messages.units.days: simply the word "days" in your language

For example :

giveaways.start(message.channel, {
    time: ms(args[0]),
    prize: args.slice(2).join(" "),
    winnersCount: parseInt(args[1]),
    messages: {
        giveaway: "@everyone\n\nšŸŽ‰šŸŽ‰ **GIVEAWAY** šŸŽ‰šŸŽ‰",
        giveawayEnded: "@everyone\n\nšŸŽ‰šŸŽ‰ **GIVEAWAY ENDED** šŸŽ‰šŸŽ‰",
        timeRemaining: "Time remaining: **{duration}**!",
        inviteToParticipate: "React with šŸŽ‰ to participate!",
        winMessage: "Congratulations, {winners}! You won **{prize}**!",
        embedFooter: "Giveaways",
        noWinner: "Giveaway cancelled, no valid participations.",
        winners: "winner(s)",
        endedAt: "Ended at",
        units: {
            seconds: "seconds",
            minutes: "minutes",
            hours: "hours",
            days: "days"
        }
    }
});