Augur is a Discord bot framework, utilizing the discord.js
library.
As of version 2.3.0, Augur uses Discord.js v12.2 and requires Node 14+.
2.3.0 introduces several new features:
- AugurCommand.parseParams
- AugurCommand.options
- AugurInteractionCommand
- AugurModule.addInteraction()
- DiscordInteraction
- DiscordInteractionResponse
- ModuleManager.InteractionManager
2.0.1 automatically unloads all modules prior to executing client.destroy()
.
2.0.8 includes various bugfixes.
npm install --save augurbot discord.js
Within your base file, require augurbot
and create a new instance of AugurClient
:
const {AugurClient} = require("augurbot");
const client = new AugurClient(config, options);
client.login();
The AugurClient will create the Discord Client, log it in using the token provided in config.token
, listen for events, and process commands. Any gateway intents are automatically calculated based on config.events
.
Minimum required properties in config
include:
events
(array): An array of discord.js events to process, includingmessage
andmessageUpdate
, if your bot will be processing message commands. Gateway intents will be automatically calculated based on theevents
supplied.
Additional optional properties include:
-
db
(object): An object, including amodel
property which is the path to your database model, relative to the base file. -
prefix
(string): A default prefix for commands. Defaults to!
. -
processDMs
(boolean): Whether to process messages in DMs. Defaults totrue
. -
token
(string): Your bot's Discord token to log in. If provided in theconfig
object, it does not need to be passed whenclient.login()
is called. If omitted, it must be passed withclient.login(token)
when logging in. -
Any other properties you wish to be able to access from your command modules.
The options
object is optional, but may include:
-
clientOptions
(object): An object containing options to be passed to the new Discord.Client(). Gateway intents are automatically calulated based onconfig.events
. If you would like to override the calculated intents, provide your own intents as usual for Discord.js. -
commands
(string): A directory, relative to the base file, containing any command modules you wish to automatically load. -
errorHandler
: A function acceptingerror
andmessage
as its arguments. This will replace the default error handling function. -
parse
(async function): An asynchronous function acceptingmessage
as its argument, returning an object withcommand
andsuffix
properties. This will replace the default parsing function. (Useful in case different servers use different prefixes, for example.)
Properties of the AugurClient class:
-
augurOptions
(object): The options object passed to the client upon initialization. -
clockwork
(ClockworkManager extends Collection):A collection of functions to be run by an interval.
register(AugurModule)
: Registers clockwork functions from a Module. Automatically called byclient.moduleHandler.register(AugurModule)
.unload(filepath)
: Unload a clockwork function from memory. Automatically called byclient.moduleHandler.unload(filepath)
.
-
commands
(CommandManager extends Collection):A collection of commands, keyed by command name.
aliases
(Collection): Collection of commands, keyed by alias.client
(AugurClient): The client.commandCount
(Number): Integer of how many commands have been executed viacommands.execute()
.execute(commandName, message, suffix)
(async function): Execute a command function. Automatically called by the event handler.register(AugurModule)
(function): Registers commands from a Module. Automatically called byclient.moduleHandler.register(AugurModule)
.
-
config
: Theconfig
object passed to the AugurClient. -
db
: Your loaded database model. -
events
(EventManager extends Collection):A collection of event handlers, keyed by event then keyed by filepath.
register(AugurModule)
: Registers event handlers from a Module. Automatically called byclient.moduleHandler.register(AugurModule)
.
-
interactions
(InteractionManager extends Collection):A collection of interaction event handlers for slash commands, keyed by interaction id. NOTE: As of Augur 2.3.0, Augur does not handle creating the data object to create or edit an interaction. See the Discord Developer Portal for details on the data object required to register a command.
register(AugurModule)
(function): Registers interaction commands from a Module. Automatically called byclient.moduleHandler.register(AugurModule)
.createGlobalCommand(data)
(function): Registers a new global slash command with Discord.createGuildCommand(guildId, data)
(function): Registers a new guild slash command with Discord.deleteGlobalCommand(commandId)
(function): Deletes an existing global slash command with Discord.deleteGuildCommand(guildId, commandId)
(function): Deletes an existing guild slash command with Discord.editGlobalCommand(commandId, data)
(function): Edits an existing global slash command with Discord.editGuildCommand(guildId, commandId, data)
(function): Edits an existing guild slash command with Discord.getGlobalCommands(commandId)
(function): Fetches an array of all global slash commands (when nocommandId
provided) or a single global slash command (whencommandId
provided).getGuildCommands(guildId, commandId)
(function): Fetches an array of all guild slash commands (when nocommandId
provided) or a single guild slash command (whencommandId
provided).
-
moduleHandler
(ModuleManager):Helper methods for loading/unloading/reloading Augur AugurModules.
register(AugurModule, data)
: Register the module with optional data.reload(filepath)
: Reload a module from a filepath, reregistering the module with data supplied by the command's.unload()
method.unload(filepath)
: Unload a module from memory.
Methods of the AugurClient class:
-
errorHandler(error, message)
: Error handling function. -
parse(message)
: Parse a message into its command name and suffix. Returns an object containingcommand
(string) andsuffix
(string).
The basic file structure:
const Augur = require("augurbot");
const Module = new Augur.Module();
// Add commands, interactions, event handlers, etc. as necessary.
module.exports = Module;
In between, you can add one or more commands and event handlers, as well as a clockwork and unload function.
Module
properties include:
-
config
: Contents of the config object loaded with the AugurClient. -
db
: The loaded database model. -
client
: The Augur client which loaded the command module.
All of the following methods are chainable:
The function passed to the .setClockwork()
method should return an interval which will continue to run in the background. The interval is cleared and reloaded when the module is reloaded. Note that the clockwork function is run after the intialization function.
Module.setClockwork(function() {
return setInterval();
});
The .addCommand()
method defines a new bot command.
Module.addCommand({
name: "commandname",
process: async (msg, suffix) => {},
aliases: [],
category: "",
description: "",
enabled: true,
hidden: false,
info: "",
options: {},
parseParams: false,
permissions: async (msg) => {},
syntax: ""
});
name
(string): Required. A string for the name of the command.process
(function): Required. The function to run when the command is invoked. This accepts either:- If
parseParams
isfalse
, (message, suffix); aDiscord.Message
object and asuffix
string of the remainder of the command supplied by the user; or - If
parseParams
istrue
, (message, ...params); aDiscord.Message
object and a list of parameters suppried by the user.
- If
aliases
(array of strings): An array of strings that can can be used as alternate names for the command.category
(string): A category name, for convenience in organizing commands. Defaults to the filename of the module.description
(string): A short string for a brief overview of the command.enabled
(boolean): Whether the command is able to run. Defaults totrue
.hidden
(boolean): A boolean for whether you want to hide the command in your help functions. Defaults tofalse
.info
(string): A longer string with more details about the command's usage.options
(object): An object of custom options that the developer may wish to use (e.g. in parsing messages).parseParams
(boolean): Determines whether to split the command suffix before passing the parameters to theprocess
function. Defaults tofalse
.permissions
(function): A function used to determine whether the user has permission to run the command. Accepts aDiscord.Message
object.syntax
(string): A string describing command syntax.
The .addEvent()
method adds an event handler for the various Discord.js events.
Module.addEvent("eventName", function(...args) {});
The .addInteraction()
method defines an interaction for slash commands.
Module.addInteraction({
id: "interactionId",
process: async (interaction) => {},
category: "",
description: "",
enabled: true,
hidden: false,
info: "",
name: "slashCommandName",
options: {},
permissions: async (interaction) => {},
syntax: ""
});
id
(string): Required. The interaction ID for the slash command.process
(function): Required. The function to run when the slash command is invoked. This accepts a DiscordInteraction object.category
(string): A category name, for convenience in organizing slash commands. Defaults to the filename of the module.description
(string): A short string for a brief overview of the slash command.enabled
(boolean): Whether the slash command is able to run. Defaults totrue
.hidden
(boolean): A boolean for whether you want to hide the slash command in your help functions. Defaults tofalse
.info
(string): A longer string with more details about the slash command's usage.name
(string): The name of the slash command.options
(object): An object of custom options that the developer may wish to use (e.g. in parsing messages).permissions
(function): A function used to determine whether the user has permission to run the slash command. Accepts aDiscordInteraction
object.syntax
(string): A string describing command syntax.
The .setInit(data)
method accepts a function to run on module initialization. The data
parameter will have a null
value on the first run, and will contain the returned by the function defined with the .setUnload()
method on subsequent reloads of the module.
Module.setInit(function(data) {});
The function passed to the .setUnload()
method will be run when unloading or reloading the module.
Module.setUnload(function() {});
As of Augur 2.3.0, Discord.js does not yet support interactions (slash commands). Once Discord.js supports interactions, the following will likely be removed in favor of official library support. As a temporary fix, the following classes are used within Augur to facilitate slash command use:
A DiscordInteraction
represents the data object provided by the Discord API on the interactionCreate
event. See the Discord Developer Portal for additional information. Properties and methods include:
-
client
(AugurClient): The Client that received the interaction. -
id
(snowflake): id of the interaction -
type
(InteractionType): the type of the interaction -
data
(ApplicationCommandInteractionData): the command data payload -
name
(string): the name of the interaction being used, found in.data.name
-
commandId
(snowflake): the id of the interaction being used, found in.data.id
-
options
(array): options found in.data.options
-
guild
(Discord.Guild): the Guild object representing the Guild where the command was run, if found -
channel
(Discord.Channel): the Channel object representing the Channel where the command was run, if found -
member
(Discord.GuildMember): the GuildMember object representing the member running the command, if in a Guild -
user
(Discord.User): the User object representing the user running the command, if found -
token
(string): a continuation token for responding to the interaction -
version
(int) always1
-
deferred
(boolean): whether the interaction has been "deferred" and waiting for a full response. -
defer()
: Defers the interaction response -
createResponse(content, options)
: Creates an initial response or edits a deferred response. -
createFollowup(content, options)
: Creates a followup response. -
deleteResponse(response)
: Deletes the identified interaction response, deleting the original response if no response/id is passed to the method. -
editResponse(content, options, response)
: Edits the identified interaction response, editing the original response if no response/id is passed to the method.
interaction
(DiscordInteraction): The interaction to which the response is related.followup(content, options)
: Convenience method callingDiscordInteraction.createFollowup(content, options)
.