# discord-selphybot A custom bot for the discord community of [https://twitch.tv/selphy](Selphy). Most of the commands are fairly specific, but the underlying command logic (i. e. the `registerCommand` wrapper) can be reused in other projects to simplify the [https://github.com/bwmarrin/discordgo](discordgo) API bindings. I might release a standalone version of just the wrappers at some point. *Might*. Anyway. ## Dependencies - go, obviously - [https://github.com/bwmarrin/discordgo](discordgo) - [https://github.com/deckarep/golang-set](golang-set) ## Usage I doubt anyone will want to run an exact copy of this, but if you do, it works just like any other project. Edit `config.json` as needed, and then run `go build *.go`. No magic involved. More relevant should be the reusable part. By calling `registerCommand` at any point during program execution, a new command can be added. A command is defined as a struct with various properties do control its behavior. - `Trigger string`: a string that is used to trigger the command when it appears in a message. `Type` is used to control how this string is matched. - `Output string`: simple text response for commands that don’t require any advanced logic. - `OutputEmbed *discordgo.MessageEmbed`: if specified, the specified embed will be used as a reply. Overwrites `Output`. - `Type CommandType`: specifies how `Trigger` is matched. Possible values are: `CommandTypePrefix, CommandTypeFullMatch, CommandTypeContains, CommandTypeRegex`. Defaults to Prefix; names should be self-explanatory. - `IgnoreCase bool`: Ignore case when matching `Trigger`. Defaults to false. - `Cooldown int`: cooldown for the command in seconds. 0 (no cooldown) if unspecified. - `OutputIsReply bool`: @mention the user who triggered the command. This requires a `<@%s>` in `Output`. Defaults to false. - `RequiresMention bool`: require @mentioning the bot to trigger the command. This requires a `<@%s>` in `Trigger`. Defaults to false. - `DeleteInput bool`: delete the messages that triggered the command. Requires permissions to manage messages. Defaults to false. - `DMOnly bool`: command can only be used in DMs. Defaults to false. - `AdminOnly bool`: command can only be used by the admins specified in `config.json`. Defaults to false. - `Function func(*discordgo.Session, *discordgo.MessageCreate)`: execute a custom function when the command is triggered and pass the Session and MessageCreate event to that function. Ignores all other options except the matching-related ones and `Trigger`. Defaults to nil. It should be noted that admin users can use DMOnly commands everywhere and are unaffected by cooldowns.