Git Product home page Git Product logo

discord-soundbot's Introduction

Discord Soundbot

Discord typescript-image Docker Pulls Sponsors

A Soundboard Bot for Discord to play your favorite sounds or music. You can add and play sounds, ignore users, set an avatar and more!

This is a self-hosted bot which means that you have to install and start the bot yourself. This is due to the bot being heavily involved with voice functionality. But don't sweat it! You can find a thorough installation and configuration guide in this README!

If you still need any help after reading this guide and the wiki, or you want to stay tuned, or simply chat, feel free to join our Discord server.

Have fun!

Installation

General

To use this bot, you first have to create your own Discord Application. If you don't know how to do it, this wiki page will guide you through every step of the way.

The bot can be installed manually, via Docker, or as an npm package. Docker is the simplest solution if you just want to run the bot, and do not have any programming experience.

Configuration

Check config/config.example.json for an example configuration and create a new file config.json inside the config folder with your desired configuration. For a detailed description on all of the options, see here. Make sure to restart the bot whenever you change the configuration, or use the !config command to update on the fly, see below.

Running via Docker

  • Make sure to have Docker installed.

  • Start the bot with the following command while passing your CLIENT_ID and TOKEN that you have obtained in the previous step in to it.

    docker pull markokajzer/discord-soundbot && \
    mkdir -p sounds/ && touch db.json && \
    docker run --name soundbot --restart=on-failure:10 -e CLIENT_ID=YOUR_CLIENT_ID -e TOKEN=YOUR_TOKEN -v $(pwd)/sounds:/app/sounds -v $(pwd)/db.json:/app/db.json markokajzer/discord-soundbot
    
  • To run the bot in the background additionally use the -d flag in the last step.

  • Pass additional configuration options by adding additional -e OPTION_NAME=option_value to the command above.

Building

When not using Docker, make sure to install Node.js v12.0.0 or newer and FFmpeg for its voice functionality. You can install ffmpeg via your favorite package manager.

Building manually

  • Clone the repository.
  • Install the dependencies with yarn install.
  • Run the bot with yarn start.

Need details? You can find more detailed installation guides for Unix (including your Raspberry Pi), macOS, and Windows.

Using npm

You can also add the bot as a project dependency to your Node project, by simply adding it to your project dependencies.

  # For npm
  $ npm install discord-soundbot

  # For yarn
  $ yarn add discord-soundbot

Start the bot.

const SoundBot = require('discord-soundbot');

const myBot = new SoundBot({
  clientId: 'YOUR_CLIENT_ID',
  token: 'YOUR_BOT_USER_TOKEN'
});
myBot.start();

For more configuration options see here. You can also add additional commands using this method, see here.

Adding the bot to your server

In both cases the bot will print a message to your console which should look a little bit like this

Use the following URL to let the bot join your server!
https://discordapp.com/oauth2/authorize?client_id={YOUR_CLIENT_ID}&scope=bot

Follow the link and allow the bot to join your Discord server.

Try out the sample sounds !airhorn and !johncena, or see below to learn how to add your own sounds.

Commands

Type !help or !commands to print a list of available commands. To see the welcome message (again), use !welcome.

You can add, rename, download, tag, play, and remove sounds, ignore users, set the avatar, and more.

Note: The commands !rename, !remove, !tag <sound> clear, !ignore, !unignore, !avatar and !config are restricted and can only be accessed by administrators by default. To configure this, adjust the elevatedRoles config option.

Languages

The bot is available in multiple languages. To see all available languages use !lang.

Note, that I do not speak all available languages and therefore some translations might be missing, out of date or just straight up bad. If you feel like contributing, reach out to me on Discord.

Adding sounds

You can add sounds to the bot by typing !add and attaching a file. Accepted file formats and a limit to the size are configurable. The name of the sound can only contain alphanumeric characters.

You can instead also add a sound from YouTube with !add <name> <link>. A range in decimals can be specified with !add <name> <link> <start> <end> where the end time is optional. Both the start time and the end have to be specified as timestamp strings with the format hh:mm:ss.xxx.

  > !add gta https://www.youtube.com/watch?v=6gQNgh6iSBM 6 9
  > !add bruh https://www.youtube.com/watch?v=2ZIpFytCSVc 12:23

Playing sounds

Type !sounds to get a list of all sounds that are available to your bot. Play any sound by prefixing it with your prefix, e.g. !rickroll. Play a random sound with !random. You can specify a tag with !random to play a random sound with a specific tag.

All sounds will be added to a queue and played in succession. To halt the playback and empty the queue type !stop.

You can use !combo <sound1> ... <soundN> to add multiple sounds to the queue.

You can loop sounds by using !loop <sound>. To loop only a couple of times, use !loop <sound> <times>

You can skip the current sound with the !skip command. To interrupt the currently playing sound with a new one use !next <sound>.

Setting entrance sounds

Every user can set his own entrance sound, a sound that will play whenever the user joins a voice channel by using !entrance <sound>. To remove your entrance sound use !entrance without specifying a sound.

The same is possible for exit sounds with !exit <sound> which will play the specified sound when leaving a voice channel.

Tagging and searching sounds

When your library of sounds gets too big and you forget what kinds of sounds you have, you can add tags to sounds.

You can add tags to sounds with !tag <sound> <tag>. You can specify one or more sounds. You can get the tags of a sound with !tag <sound>. You can also remove all tags from a sound with !tag <sound> clear.

To search for specific sounds use !search <tag>. It will look for the name of the sound as well as tags that you might have added to the sound.

To see all sounds with their respective tags use !tags.

Adjusting sounds

Sounds can be adjusted in various ways.

Use !modify <sound> volume <value> to adjust the volume of a sound. You can increase the volume, or lower it by using fractional values.

  > !modify airhorn volume 4
  > !modify johncena volume 0.5

To adjust the length or to clip a sound, you can use !modify <sound> clip <start> <end>. Both start and end time need to be of the form hh:mm:ss.xxx where the hours, minutes, and milliseconds are optional. Additionally you can leave out the end time to only remove the beginning of a sound.

  > !modify airhorn clip 12:23 12:25
  > !modify johncena clip 23

Renaming sounds

Sounds can be renamed by using !rename <old> <new>. The bot will respond with a status update.

Removing sounds

You can delete sounds by typing !remove <sound>. The bot will respond with the status of the deletion in the channel of the message.

Downloading sounds

You can send existing sounds to chat with !download <sound> in case you do not have the files anymore.

Ignoring users

Users can be ignore from using any command by the !ignore <user> command while specifying their respective ID. The user will be mentioned by the bot in the channel of the message. Use !unignore <user> to allow the user to interact with the bot again.

Setting an avatar

Use !avatar and attach an image to set the bot's avatar. You can remove the avatar to go back to the default by using the optional remove parameter as in !avatar remove.

Changing the config

The config can be changed by editing the config.json file, after which the bot needs to be restarted.

To change the config on the go, use !config <option> <value>. This will change the configuration immediately and update the configuration file.

Contributing

This bot is a dear passion project of mine. If you encounter any bugs, or have any suggestions for new features or improvements, feel free to open an issue or talk to me on Discord. I'll be glad to look into it!

In particular, thanks to these splendid lads for providing localization:

discord-soundbot's People

Contributors

dependabot[bot] avatar emanuelfranklyn avatar gruntzy avatar hiajen avatar ibito avatar kijz avatar markokajzer avatar nstapelbroek avatar shamus03 avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

discord-soundbot's Issues

Interrupting currently playing sound when starting a new sound

I just wanted to request a certain feature that would be very nice to have: being able to interrupt the currently playing sound when starting a new sound.

In our context we very often have multiple people starting sounds in parallel that usually works much better when sounds are interrupting each other - especially considering some of our sounds go up to 30-60 seconds long.

Typescript error when building

Error when building, tried multiple node versions - same result:

> tsc -p tsconfig.json

node_modules/@types/lowdb/_lodash.d.ts:817:20 - error TS2694: Namespace '_' has no exported member 'ExplicitPartial'.

817         partial: _.ExplicitPartial;
                       ~~~~~~~~~~~~~~~

node_modules/@types/lowdb/_lodash.d.ts:818:25 - error TS2694: Namespace '_' has no exported member 'ExplicitPartialRight'.

818         partialRight: _.ExplicitPartialRight;
                            ~~~~~~~~~~~~~~~~~~~~

node_modules/@types/lowdb/_lodash.d.ts:2417:20 - error TS2694: Namespace '_' has no exported member 'ExplicitPartial'.

2417         partial: _.ExplicitPartial;
                        ~~~~~~~~~~~~~~~

node_modules/@types/lowdb/_lodash.d.ts:2418:25 - error TS2694: Namespace '_' has no exported member 'ExplicitPartialRight'.

2418         partialRight: _.ExplicitPartialRight;
                             ~~~~~~~~~~~~~~~~~~~~

src/bot/commands/MostPlayedCommand.ts:21:58 - error TS7006: Parameter 'sound' implicitly has an 'any' type.

21     const longestSound = this.findLongestWord(sounds.map(sound => sound.name));
                                                            ~~~~~

src/bot/commands/MostPlayedCommand.ts:22:58 - error TS7006: Parameter 'sound' implicitly has an 'any' type.

22     const longestCount = this.findLongestWord(sounds.map(sound => String(sound.count)));
                                                            ~~~~~

src/bot/commands/SearchCommand.ts:21:33 - error TS7006: Parameter 'sound' implicitly has an 'any' type.

21     sounds.withTag(tag).forEach(sound => results.push(sound));
                                   ~~~~~

src/util/db/Entrances.ts:5:77 - error TS2551: Property 'value' does not exist on type 'LoDashExplicitSyncWrapper<any>'. Did you mean 'values'?

5 export const get = (userId: string) => connection.get(`${table}.${userId}`).value();
                                                                              ~~~~~

  node_modules/@types/lowdb/_lodash.d.ts:1389:9
    1389         values<T>(this: LoDashExplicitSyncWrapper<_.Dictionary<T> | _.NumericDictionary<T> | _.List<T> | null | undefined>): LoDashExplicitSyncWrapper<T[]>;
                 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    'values' is declared here.

src/util/db/Exits.ts:5:77 - error TS2551: Property 'value' does not exist on type 'LoDashExplicitSyncWrapper<any>'. Did you mean 'values'?

5 export const get = (userId: string) => connection.get(`${table}.${userId}`).value();
                                                                              ~~~~~

  node_modules/@types/lowdb/_lodash.d.ts:1389:9
    1389         values<T>(this: LoDashExplicitSyncWrapper<_.Dictionary<T> | _.NumericDictionary<T> | _.List<T> | null | undefined>): LoDashExplicitSyncWrapper<T[]>;
                 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    'values' is declared here.

src/util/db/IgnoreList.ts:7:6 - error TS2551: Property 'value' does not exist on type 'LoDashExplicitSyncWrapper<any>'. Did you mean 'values'?

7     .value();
       ~~~~~

  node_modules/@types/lowdb/_lodash.d.ts:1389:9
    1389         values<T>(this: LoDashExplicitSyncWrapper<_.Dictionary<T> | _.NumericDictionary<T> | _.List<T> | null | undefined>): LoDashExplicitSyncWrapper<T[]>;
                 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    'values' is declared here.

src/util/db/Sounds.ts:8:38 - error TS2551: Property 'value' does not exist on type 'LoDashExplicitSyncWrapper<any>'. Did you mean 'values'?

8   const { tags } = findByName(sound).value() as Sound;
                                       ~~~~~

  node_modules/@types/lowdb/_lodash.d.ts:1389:9
    1389         values<T>(this: LoDashExplicitSyncWrapper<_.Dictionary<T> | _.NumericDictionary<T> | _.List<T> | null | undefined>): LoDashExplicitSyncWrapper<T[]>;
                 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    'values' is declared here.

src/util/db/Sounds.ts:17:60 - error TS2551: Property 'value' does not exist on type 'LoDashExplicitSyncWrapper<any>'. Did you mean 'values'?

17 export const exists = (name: string) => !!findByName(name).value();
                                                              ~~~~~

  node_modules/@types/lowdb/_lodash.d.ts:1389:9
    1389         values<T>(this: LoDashExplicitSyncWrapper<_.Dictionary<T> | _.NumericDictionary<T> | _.List<T> | null | undefined>): LoDashExplicitSyncWrapper<T[]>;
                 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    'values' is declared here.

src/util/db/Sounds.ts:39:39 - error TS2551: Property 'value' does not exist on type 'LoDashExplicitSyncWrapper<any>'. Did you mean 'values'?

39   const newValue = (findByName(sound).value() as Sound).count + 1;
                                         ~~~~~

  node_modules/@types/lowdb/_lodash.d.ts:1389:9
    1389         values<T>(this: LoDashExplicitSyncWrapper<_.Dictionary<T> | _.NumericDictionary<T> | _.List<T> | null | undefined>): LoDashExplicitSyncWrapper<T[]>;
                 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    'values' is declared here.

src/util/db/Sounds.ts:49:6 - error TS2551: Property 'value' does not exist on type 'LoDashExplicitSyncWrapper<boolean[]>'. Did you mean 'values'?

49     .value();
        ~~~~~

  node_modules/@types/lowdb/_lodash.d.ts:1389:9
    1389         values<T>(this: LoDashExplicitSyncWrapper<_.Dictionary<T> | _.NumericDictionary<T> | _.List<T> | null | undefined>): LoDashExplicitSyncWrapper<T[]>;
                 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    'values' is declared here.

src/util/db/Sounds.ts:59:29 - error TS2551: Property 'value' does not exist on type 'LoDashExplicitSyncWrapper<any>'. Did you mean 'values'?

59   return (findByName(sound).value() as Sound).tags.sort();
                               ~~~~~

  node_modules/@types/lowdb/_lodash.d.ts:1389:9
    1389         values<T>(this: LoDashExplicitSyncWrapper<_.Dictionary<T> | _.NumericDictionary<T> | _.List<T> | null | undefined>): LoDashExplicitSyncWrapper<T[]>;
                 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    'values' is declared here.

src/util/db/Sounds.ts:73:6 - error TS2339: Property 'reverse' does not exist on type 'LoDashExplicitSyncWrapper<any[]>'.

73     .reverse()
        ~~~~~~~

ERR_INVALID_ARG_TYPE

TypeError [ERR_INVALID_ARG_TYPE]: The "file" argument must be of type string. Received type object

Current build may be broken?

Hi there,
Trying to run the bot using the docker commands in the readme with a clean install results in:

docker.io/markokajzer/discord-soundbot:latest
yarn run v1.22.4
$ node dist/bin/soundbot.js
/app/node_modules/lowdb/adapters/FileSync.js:42
          throw e;
          ^

Error: EISDIR: illegal operation on a directory, read
    at Object.readSync (fs.js:524:3)
    at tryReadSync (fs.js:349:20)
    at readFileSync (fs.js:386:19)
    at FileSync.read (/app/node_modules/lowdb/adapters/FileSync.js:35:22)
    at LodashWrapper.db.read (/app/node_modules/lowdb/lib/main.js:32:21)
    at Object.module.exports [as default] (/app/node_modules/lowdb/lib/main.js:51:13)
    at Object.<anonymous> (/app/dist/src/util/db/connection.js:9:35)
    at Module._compile (internal/modules/cjs/loader.js:1133:30)
    at Object.Module._extensions..js (internal/modules/cjs/loader.js:1153:10)
    at Module.load (internal/modules/cjs/loader.js:977:32) {
  errno: -21,
  syscall: 'read',
  code: 'EISDIR'
}
error Command failed with exit code 1.
info Visit https://yarnpkg.com/en/docs/cli/run for documentation about this command.

After I ran into the above I tried cloning the repo and poking around (running docker-compose up) and that also failed. The bot sounds really neat and I was looking forward to running it. Any ideas?

[Feature] WAV-Support

I really like the bot. It's easier to use and works more reliable than other currently available sound bots, though the installation is a bit tricky. Nonetheless, what I am really missing here is support for WAV-files as well. I got mixed MP3 and WAV sounds and since both are well established standards for sounds and music, it would be really nice. Converting forth and back is a bit annoying (had to do so for another bot - only accepted WAV-files).

Great work, nonetheless!

[Feature Request] Remove commands sent to unmonitored channels

Building on issue #54's proposed channel monitoring functionality, it makes sense for the bot to also remove errant commands sent to an unmonitored channel.

In this scenario, if any channels are specified for monitoring on a given a server, commands sent to the bot in any unmonitored channel on that server should be automatically removed in conjunction with the instructions sent to the user via DM from issue #54.

If no channels are specified for monitoring on a given server, follow current behavior (monitor/allow all commands in any channel).

[Feature Request] Normalize audio

We add lots of sounds with my friends, and not all have the same volume. This leads to some sounds being too loud while others are not well audible.

Would it be possible to play files at different volumes based on audio wave amplitude? Or maybe just have an option to normalize sounds when they are added?

Changing avatar?

Is there a directory within the files to be able to customize the bot's avatar?

Great bot, exactly what I was looking for.

Custom Sound Directory

Thanks for putting together this bot! My friends and I are having a blast using it. Would it be possible to specify a custom sound directory? I have two different soundboards and I would like them to share the same sounds dir location instead of having to add the sounds to both bots.

Thanks!
Steve

Random crash

I don't know what causes this, but it happens every once in a while.

(node:24141) UnhandledPromiseRejectionWarning: DiscordAPIError: Unknown Message
    at item.request.gen.end (/root/Desktop/discord-soundbot/node_modules/discord.js/src/client/rest/RequestHandlers/Sequential.js:79:15)
    at then (/root/Desktop/discord-soundbot/node_modules/snekfetch/src/index.js:215:21)
    at <anonymous>
    at process._tickCallback (internal/process/next_tick.js:189:7)
(node:24141) UnhandledPromiseRejectionWarning: Unhandled promise rejection. This error originated either by throwing inside of an async function without a catch block, or by rejecting a promise which was not handled with .catch(). (rejection id: 2)
(node:24141) [DEP0018] DeprecationWarning: Unhandled promise rejections are deprecated. In the future, promise rejections that are not handled will terminate the Node.js process with a non-zero exit code.

[bug] Ignore list does not work

The IgnoreList module's exists and remove functions do not work properly. I think this is because lowdb wasn't intended to store bare strings, so the find and remove functions don't work properly with bare strings. This can be verified by checking that a user is in the ignore list, and then calling exists on that user - it will return false. remove will also not remove that user, and calling add multiple times will add the same user multiple times.

Python/Opus build error

image

I'm working with Node 7.10. Opus seems to have issues building and it seems to have issues locating Python's executable despite looking in the correct directory.

Feature: display sounds with description and organized by category

Hi!

Recently I created a similar application for creating sound bots, but your one is more complete, so I think I'll start using yours ๐Ÿ˜„

However, I miss some features from my old one. One of the features was allowing the users to attach a yaml file associated to the sound files (with the same name as the sound and .info extension). Whenever I load the sounds from the folder, I also parse these .info files and display a more complete help message when receiving the !sounds command (even allowing to display only for some category). These .info files are completely optional and the sounds which doesn't have one are grouped into an Other category.

Let me know if you like this feature and I could create a PR with it. ๐ŸŽˆ

how can i install ffmpeg?

Hi. thanks for create the bot, it works. but I can't play any sound, when I use the command "! sound", in my cmd I got this error
"Error occured!
Error: FFMPEG not found
at Function.selectFfmpegCommand (C:\discord-soundbot-master\node_modules\prism-media\src\transcoders\ffmpeg\Ffmpeg.js:46:13)
at new FfmpegTranscoder (C:\discord-soundbot-master\node_modules\prism-media\src\transcoders\ffmpeg\Ffmpeg.js:7:37)
at new MediaTranscoder (C:\discord-soundbot-master\node_modules\prism-media\src\transcoders\MediaTranscoder.js:10:19)
at new Prism (C:\discord-soundbot-master\node_modules\prism-media\src\Prism.js:5:23)
at VoiceConnection (C:\discord-soundbot-master\node_modules\discord.js\src\client\voice\VoiceConnection.js:46:18)
at Promise (C:\discord-soundbot-master\node_modules\discord.js\src\client\voice\ClientVoiceManager.js:63:22)
at ClientVoiceManager.joinChannel (C:\discord-soundbot-master\node_modules\discord.js\src\client\voice\ClientVoiceManager.js:45:12)
at VoiceChannel.join (C:\discord-soundbot-master\node_modules\discord.js\src\structures\VoiceChannel.js:120:30)
at SoundBot.playSoundQueue (C:\discord-soundbot-master\src\SoundBot.js:114:18)
at SoundBot.handleSoundCommands (C:\discord-soundbot-master\src\SoundBot.js:95:47)"

I use this guide to install ffmpeg https://goo.gl/Xc2CcG

ref package error

On Ubuntu 16.10 it looks like some dependencies are unmet.

npm-debug.log.txt

[email protected] install /tmp/asd-root/home/andy/discord-soundbot/node_modules/ref
node-gyp rebuild

/bin/sh: 1: node: not found
gyp: Call to 'node -e "require('nan')"' returned exit status 127 while in binding.gyp. while trying to load binding.gyp
gyp ERR! configure error
gyp ERR! stack Error: gyp failed with exit code: 1
gyp ERR! stack at ChildProcess.onCpExit (/usr/share/node-gyp/lib/configure.js:304:16)
gyp ERR! stack at emitTwo (events.js:87:13)
gyp ERR! stack at ChildProcess.emit (events.js:172:7)
gyp ERR! stack at Process.ChildProcess._handle.onexit (internal/child_process.js:200:12)
gyp ERR! System Linux 4.8.0-39-generic
gyp ERR! command "/usr/bin/nodejs" "/usr/bin/node-gyp" "rebuild"
gyp ERR! cwd /tmp/asd-root/home/andy/discord-soundbot/node_modules/ref
gyp ERR! node -v v4.2.6
gyp ERR! node-gyp -v v3.4.0
gyp ERR! not ok
npm WARN [email protected] requires a peer of bufferutil@^2.0.0 but none was installed.
npm WARN [email protected] requires a peer of opusscript@^0.0.2 but none was installed.
npm WARN [email protected] requires a peer of sodium@^2.0.1 but none was installed.
npm ERR! Linux 4.8.0-39-generic
npm ERR! argv "/usr/bin/nodejs" "/usr/bin/npm" "install"
npm ERR! node v4.2.6
npm ERR! npm v3.5.2
npm ERR! code ELIFECYCLE

npm ERR! [email protected] install: node-gyp rebuild
npm ERR! Exit status 1
npm ERR!
npm ERR! Failed at the [email protected] install script 'node-gyp rebuild'.
npm ERR! Make sure you have the latest version of node.js and npm installed.
npm ERR! If you do, this is most likely a problem with the ref package,
npm ERR! not with npm itself.
npm ERR! Tell the author that this fails on your system:
npm ERR! node-gyp rebuild
npm ERR! You can get information on how to open an issue for this project with:
npm ERR! npm bugs ref
npm ERR! Or if that isn't available, you can get their info via:
npm ERR! npm owner ls ref
npm ERR! There is likely additional logging output above.

npm ERR! Please include the following file with any support request:
npm ERR! /tmp/asd-root/home/andy/discord-soundbot/npm-debug.log

User entrance sounds are lost after the bot is restarted

Hello and thank you for the time you have spent on this project. Myself and my users are enjoying it very much. I am running this with Ubuntu 18.04 and Node 8.10. For me, users can set entrance sounds successfully via the command and the sounds play properly, however if the bot is restarted it will no longer play the entrance sounds until the users set them back up again.

Crash on raspberry pi 3b+

Hi,
first thanks for the bot; it is very useful and funny, me and my friends use evryday.
I've installed the bot on my raspberry pi 3b+ with the last raspbian and it continue to crash with the same log (attached it as txt Log bot discord.txt)

could you take a quick look? if it's something difficult to fix no problem

Leaving Voice Channel Right After Join

I'm trying to make this bot play a 3 second audio clip but no matter what I do, it continues to join the voice chat then leaves instantly without playing the clip. Any insight on what I'm doing wrong would be highly appreciated!

[Feature Request] Enable Parsing Webhook Messages.

I am trying to get your bot to react to messages posted by a webhook. I have a lot of sounds added through the bot like a soundboard. Me and my friends use them when we game being silly. I created a webpage that sends a message using webhooks to a hidden channel on our server but the bot will not activate from messages the webhook post. It works when I type the commands into the channel on my desktop client. I have tried changing !message.author.bot to remove the ! but still doesn't work.

Feature: Bulk sound adding

I am thinking of changing sound bots, however I have a number of sound clips that I already use in a different bot and would like some method of bulk adding sounds to this bot.

I suggest some way to scan a folder and add all sounds found there to the database. Even if this would just use only the folder where the sounds are stored by this bot that would work for my use case.

Sorry if I missed a command to do this.

Publish package on NPM

Hi there!

Great work with the soundbot, thank you.

While trying to upgrade from 0.8.0 to 1.0.0 I noticed that the repository isn't hosted on the npmjs.com registry. The package.json states dicord_soundbot as the name of the package, however it does not exist at https://www.npmjs.com/package/dicord_soundbot (or at any other link for that matter).

For more information on publishing a package on npmjs.com see this article.

Verbose Stack Error

Hi,
after some days of normal operation, it seems that the bot just randomly crashed. The npm log:

0 info it worked if it ends with ok
1 verbose cli [ '/usr/bin/node', '/usr/bin/npm', 'start' ]
2 info using [email protected]
3 info using [email protected]
4 verbose run-script [ 'prestart', 'start', 'poststart' ]
5 info lifecycle [email protected]~prestart: [email protected]
6 info lifecycle [email protected]~start: [email protected]
7 verbose lifecycle [email protected]~start: unsafe-perm in lifecycle true
8 verbose lifecycle [email protected]~start: PATH: /usr/lib/node_modules/npm/bin/node-gyp-bin:/home/matthias/discord-soundbot/node_modules/.bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
9 verbose lifecycle [email protected]~start: CWD: /home/matthias/discord-soundbot
10 silly lifecycle [email protected]~start: Args: [ '-c', 'npm run build && npm run serve' ]
11 silly lifecycle [email protected]~start: Returned: code: 1  signal: null
12 info lifecycle [email protected]~start: Failed to exec start script
13 verbose stack Error: [email protected] start: `npm run build && npm run serve`
13 verbose stack Exit status 1
13 verbose stack     at EventEmitter.<anonymous> (/usr/lib/node_modules/npm/node_modules/npm-lifecycle/index.js:280:16)
13 verbose stack     at EventEmitter.emit (events.js:159:13)
13 verbose stack     at ChildProcess.<anonymous> (/usr/lib/node_modules/npm/node_modules/npm-lifecycle/lib/spawn.js:55:14)
13 verbose stack     at ChildProcess.emit (events.js:159:13)
13 verbose stack     at maybeClose (internal/child_process.js:943:16)
13 verbose stack     at Process.ChildProcess._handle.onexit (internal/child_process.js:220:5)
14 verbose pkgid [email protected]
15 verbose cwd /home/matthias/discord-soundbot
16 verbose Linux 3.16.0-4-amd64
17 verbose argv "/usr/bin/node" "/usr/bin/npm" "start"
18 verbose node v9.3.0
19 verbose npm  v5.5.1
20 error code ELIFECYCLE
21 error errno 1
22 error [email protected] start: `npm run build && npm run serve`
22 error Exit status 1
23 error Failed at the [email protected] start script.
23 error This is probably not a problem with npm. There is likely additional logging output above.
24 verbose exit [ 1, true ]

Is there any fault on my side?

support range in !add from youtube

ytdl-core supports a range option to download only a portion of the video. It would be nice to have this in the soundbot as well.

I think it should be enough to add a range option here.

What do you think about parsing start/end from the link's query parameters in makeRequest ? This mirrors YouTube's current ability to add a range to an embed link (which already work for the add command). Example: https://www.youtube.com/embed/ZWQ0591PAxM?start=120&end=240

Pending approval I could pick this up. Doesn't seem like a large undertaking.

Error: Connection not established within 15 seconds.

After a while I get this error. Also occurs when multiple people join within a few seconds.
Error occured! Error: Error: Connection not established within 15 seconds. at VoiceConnection.authenticateFailed (/root/discord-soundbot/node_modules/discord.js/src/client/voice/VoiceConnection.js:256:27) at connectTimeout.client.setTimeout (/root/discord-soundbot/node_modules/discord.js/src/client/voice/VoiceConnection.js:285:18) at Timeout.setTimeout (/root/discord-soundbot/node_modules/discord.js/src/client/Client.js:436:7) at ontimeout (timers.js:436:11) at tryOnTimeout (timers.js:300:5) at listOnTimeout (timers.js:263:5) at Timer.processTimers (timers.js:223:10)

Bot stops reacting after a while

Hey! First of all thanks for the work with this Sound Bot!
I got mine running on a cloud machine and at first everything seems to be ok. After a while the bot leaves (I turned on the config that he should stay in a channel) and never comes back.
I still see him as online user, so the proccess should still be running in the cloud.
When I checked the logs I saw this error message:

Error occured!
 TypeError: Cannot read property 'join' of undefined
    at SoundQueue.playNext (/home/ubuntu/discord-soundbot/dist/src/queue/SoundQueue.js:66:14)
    at SoundQueue.onFinishedPlayingSound (/home/ubuntu/discord-soundbot/dist/src/queue/SoundQueue.js:98:18)
    at currentSound.channel.join.then.then.then.connection (/home/ubuntu/discord-soundbot/dist/src/queue/SoundQueue.js:69:38)
    at <anonymous>
    at process._tickCallback (internal/process/next_tick.js:189:7)
(node:20011) UnhandledPromiseRejectionWarning: DiscordAPIError: Unknown Message
    at item.request.gen.end (/home/ubuntu/discord-soundbot/node_modules/discord.js/src/client/rest/RequestHandlers/Sequential.js:85:15)
    at then (/home/ubuntu/discord-soundbot/node_modules/snekfetch/src/index.js:215:21)
    at <anonymous>
    at process._tickCallback (internal/process/next_tick.js:189:7)
(node:20011) UnhandledPromiseRejectionWarning: Unhandled promise rejection. This error originated either by throwing inside of an async function without a catch block, or by rejecting a promise which was not handled with .catch(). (rejection id: 9)
(node:20011) [DEP0018] DeprecationWarning: Unhandled promise rejections are deprecated. In the future, promise rejections that are not handled will terminate the Node.js process with a non-zero exit code.

Any Idea who I could fix it?

Greetings,
Jufoli!

[Feature Request] Audio Stream Interrupt/Commandeer

This.... this is kind of a weird one, and/or a lot of work to implement, in two stages. If you close this outright as wholly unnecessary functionality, I'll totally understand.

Stage 1: A command to interrupt the current playback and immediately start with another sound. This could probably just be a new command that combines the functionality of !stop with a playback argument. I might just hack one together later.
Stage 1 Optional: Maybe this also only interrupts the queue at the current sound, and then continues the rest of the playback stack. Haven't looked at how command parsing is handled, so maybe it's less a "queue" and more the bot only processing one command at a time, but I'm thinking it's probably a queueing mechanism, since !stop will proc regardless of the current chat state, and there is a !skip/!next
Stage 2: The same as stage 1, but starting playback of the next sound at the same timestamp as the interrupted stream, or a specified timestamp. This one is tricky for me, because I haven't taken the time to actually look at how playback happens. Is this getting piped into a fifo stream? If so, it may be possible to hijack the fifo stream and inject a different audio file. This will almost definitely end up with audio artifacting, because fifos are fun that way

Bot not playing sound

The bot is joining the channel and leaves it immediately without playing the sound. Tried multiple file formats, sizes. Tried to debug myself, but doesn't throw any errors. Help would be appreciated.

Bot doesn't join voice channel

I added a sound in the bot, a very low-size sound of just a few KBs, i typed the command to play it, but the bot doesn't join the channel and play it. I tried different file types but nothing worked.
How do i fix this?

soundcard/device access

Can soundbot access local sound devices? Interested in sending the "line in" feed from a PC as a soundbot.

with large file lists, tag !search is not broken into discord-digestible chunks

noticed that you couldn't do a !search if you had too many sounds tagged, because of Discord's innate refusal to parse >2000 character messages

so i went into /discord-soundbot/src/bot/commands/SearchCommand.ts and made the following changes:

import { Message } from 'discord.js';

import * as sounds from '@util/db/Sounds';
import localize from '@util/i18n/localize';
import { getSounds } from '@util/SoundUtil';
import Command from './base/Command';

//added an import statement for chunkedmessages
import chunkedMessages from './helpers/chunkedMessages';

export default class SearchCommand implements Command {
  public readonly TRIGGERS = ['search'];
  public readonly NUMBER_OF_PARAMETERS = 1;
  public readonly USAGE = 'Usage: !search <tag>';

  public run(message: Message, params: string[]) {
    if (params.length !== this.NUMBER_OF_PARAMETERS) {
      message.channel.send(this.USAGE);
      return;
    }

    const tag = params.shift()!;
    const results = getSounds().filter(sound => sound.includes(tag));
    sounds.withTag(tag).forEach(sound => results.push(sound));

    if (!results.length) {
      message.author.send(localize.t('commands.search.notFound'));
      return;
    }

//added the constant for page numbering
    const page = parseInt(params[0]);

    const uniqueResults = [...new Set(results)].sort();

//changed message authorship to instead pass to chunkedmessages with uniqueResults instead of the full sound list
    chunkedMessages(uniqueResults, page).forEach(chunk => message.author.send(chunk));

  }
}

Some sounds won't play

I have quite a few sounds on the bot at this point (182)

After updating it it seems some sounds just refuse to play while others will without a problem.
They all have the same Rights, the sizes differ, just some will not play.
No error, he just joins the voice channel and never plays the sound.

Some that will not work:
!vine_bruh
!VGW

Some that will work:
!shia_katana
!mk_fatality

It actually crashed after trying VGW, so here's that npm-debug.log
If giving you the sounds will help let me know and I'll try to upload them.

0 info it worked if it ends with ok 1 verbose cli [ '/usr/bin/nodejs', '/usr/bin/npm', 'start' ] 2 info using [email protected] 3 info using [email protected] 4 verbose run-script [ 'prestart', 'start', 'poststart' ] 5 info lifecycle [email protected]~prestart: [email protected] 6 silly lifecycle [email protected]~prestart: no script for prestart, continuing 7 info lifecycle [email protected]~start: [email protected] 8 verbose lifecycle [email protected]~start: unsafe-perm in lifecycle true 9 verbose lifecycle [email protected]~start: PATH: /usr/lib/node_modules/npm/bin/node-gyp-bin:/root/shazboi/node_modules/.bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/bin:/root/go/bin 10 verbose lifecycle [email protected]~start: CWD: /root/shazboi 11 silly lifecycle [email protected]~start: Args: [ '-c', 'node bot.js' ] 12 silly lifecycle [email protected]~start: Returned: code: 1 signal: null 13 info lifecycle [email protected]~start: Failed to exec start script 14 verbose stack Error: [email protected] start: node bot.js14 verbose stack Exit status 1 14 verbose stack at EventEmitter.<anonymous> (/usr/lib/node_modules/npm/lib/utils/lifecycle.js:255:16) 14 verbose stack at emitTwo (events.js:106:13) 14 verbose stack at EventEmitter.emit (events.js:191:7) 14 verbose stack at ChildProcess.<anonymous> (/usr/lib/node_modules/npm/lib/utils/spawn.js:40:14) 14 verbose stack at emitTwo (events.js:106:13) 14 verbose stack at ChildProcess.emit (events.js:191:7) 14 verbose stack at maybeClose (internal/child_process.js:877:16) 14 verbose stack at Process.ChildProcess._handle.onexit (internal/child_process.js:226:5) 15 verbose pkgid [email protected] 16 verbose cwd /root/shazboi 17 error Linux 2.6.32-042stab116.2 18 error argv "/usr/bin/nodejs" "/usr/bin/npm" "start" 19 error node v6.5.0 20 error npm v3.10.9 21 error code ELIFECYCLE 22 error [email protected] start:node bot.js22 error Exit status 1 23 error Failed at the [email protected] start script 'node bot.js'. 23 error Make sure you have the latest version of node.js and npm installed. 23 error If you do, this is most likely a problem with the dicord_soundbot package, 23 error not with npm itself. 23 error Tell the author that this fails on your system: 23 error node bot.js 23 error You can get information on how to open an issue for this project with: 23 error npm bugs dicord_soundbot 23 error Or if that isn't available, you can get their info via: 23 error npm owner ls dicord_soundbot 23 error There is likely additional logging output above. 24 verbose exit [ 1, true ]

Set game status using !config to string. Request.

I've tried using " and ' around my game status but it only updates the word. Is there any way to update the config game status without restarting the server? Example when I type !config game "here is my update" it only changes to "here .

Bot joins but does not play any sound on Windows

Hello !

Sorry to bother you, I'm very very new to all of this so I'm sorry if it's an obvious mistake on my part.

I followed steps by steps your instruction to manually build the bot and I think I've got it all fine, the bot seem very stable, no crash, the sounds list is what I put in the sounds folder path is good, and it join vocal as soon as I type a command in, the problem is that it does not play any sounds.

Nothing comes out of the bot so I checked out the command box to see is there's any error and there's is actually, just after I got the "Use the following URL to let the bot join your server!" here's what it says :

Capture

I can't even understand if it's linked to my issue lol.

Thanks in advance !

[Feature Request] Specify channel(s) for bot to monitor

It would be great if you could specify in config.json the server ID(s) and channel ID(s) for the bot to monitor to keep larger servers clean.

If a command is issued in an unmonitored channel, the bot should directly message the requester informing them to use one of the monitored channels on that server (providing a list of channel hotlinks).

If a command is issued in a monitored channel, then behave as normal.

Disconnect Loop

The bot works great at all but after a time idling it starts to disconnect/reconnect every couple of seconds. It does not take long until i get an email from discord telling me they reset the token because of potential abuse of the bot because it reconnected over 1000 times.

Here are some errors from the console:
`
Use the following URL to let the bot join your server!
https://discordapp.com/oauth2/authorize?client_id=303184336902029312&scope=bot
events.js:160
throw er; // Unhandled 'error' event
^

Error: Error: Connection not established within 15 seconds.
at VoiceConnection.authenticateFailed (/home/discord/discord-soundbot/node_modules/discord.js/src/client/voice/VoiceConnection.js:256:26)
at connectTimeout.client.setTimeout (/home/discord/discord-soundbot/node_modules/discord.js/src/client/voice/VoiceConnection.js:277:18)
at Timeout.setTimeout (/home/discord/discord-soundbot/node_modules/discord.js/src/client/Client.js:420:7)
at ontimeout (timers.js:380:14)
at tryOnTimeout (timers.js:244:5)
at Timer.listOnTimeout (timers.js:214:5)
discord@jcrnet:~/discord-soundbot$ node bot.js
Use the following URL to let the bot join your server!
https://discordapp.com/oauth2/authorize?client_id=303184336902029312&scope=bot
(node:27661) UnhandledPromiseRejectionWarning: Unhandled promise rejection (rejection id: 1): Error: 404 Not Found
`
Any ideas?

TIA,
jcr

Bot not joining voice channel

Hello, I have followed what I could on the instructions. I have installed ffmpeg but when I type any of the commands to play a sound it won't join the chat. Do I need to run any other commands or download anything else?

the bot simply doesnt work

please help me it shows the message please enter a voice channel but after 10 minutes and 15 messages it still doesnt respond to them?

Bot cuts away end of sound, doesn't play most sounds

Installed this soundbot today on Windows. It seems to play some of our sounds, but others (especially short sounds) don't seem to work.

(node:21500) UnhandledPromiseRejectionWarning: DiscordAPIError: Missing Permissions at item.request.gen.end (D:\soundbot\discord-soundbot-1.5.1\node_modules\discord.js\src\client\rest\RequestHandlers\Sequential.js:79:15) at then (D:\soundbot\discord-soundbot-1.5.1\node_modules\snekfetch\src\index.js:215:21) at process._tickCallback (internal/process/next_tick.js:68:7) (node:21500) UnhandledPromiseRejectionWarning: Unhandled promise rejection. This error originated either by throwing inside of an async function without a catch block, or by rejecting a promise which was not handled with .catch(). (rejection id: 8)

Error: Could not locate the bindings file.

Everything went fine, but when I try to play a sound, it only end up doing this.

Error occured!
 { Error: Could not locate the bindings file. Tried:
 โ†’ C:\Users\varadi\Desktop\discord-soundbot-1.0.2\node_modules\node-opus\build\node-opus.node
 โ†’ C:\Users\varadi\Desktop\discord-soundbot-1.0.2\node_modules\node-opus\build\Debug\node-opus.node
 โ†’ C:\Users\varadi\Desktop\discord-soundbot-1.0.2\node_modules\node-opus\build\Release\node-opus.node
 โ†’ C:\Users\varadi\Desktop\discord-soundbot-1.0.2\node_modules\node-opus\out\Debug\node-opus.node
 โ†’ C:\Users\varadi\Desktop\discord-soundbot-1.0.2\node_modules\node-opus\Debug\node-opus.node
 โ†’ C:\Users\varadi\Desktop\discord-soundbot-1.0.2\node_modules\node-opus\out\Release\node-opus.node
 โ†’ C:\Users\varadi\Desktop\discord-soundbot-1.0.2\node_modules\node-opus\Release\node-opus.node
 โ†’ C:\Users\varadi\Desktop\discord-soundbot-1.0.2\node_modules\node-opus\build\default\node-opus.node
 โ†’ C:\Users\varadi\Desktop\discord-soundbot-1.0.2\node_modules\node-opus\compiled\8.11.4\win32\x64\node-opus.node
    at bindings (C:\Users\varadi\Desktop\discord-soundbot-1.0.2\node_modules\bindings\bindings.js:88:9)
    at Object.<anonymous> (C:\Users\varadi\Desktop\discord-soundbot-1.0.2\node_modules\node-opus\lib\OpusEncoder.js:4:34)
    at Module._compile (module.js:652:30)
    at Object.Module._extensions..js (module.js:663:10)
    at Module.load (module.js:565:32)
    at tryModuleLoad (module.js:505:12)
    at Function.Module._load (module.js:497:3)
    at Module.require (module.js:596:17)
    at require (internal/module.js:11:18)
    at Object.<anonymous> (C:\Users\varadi\Desktop\discord-soundbot-1.0.2\node_modules\node-opus\index.js:4:19)
  tries:
   [ 'C:\\Users\\varadi\\Desktop\\discord-soundbot-1.0.2\\node_modules\\node-opus\\build\\node-opus.node',
     'C:\\Users\\varadi\\Desktop\\discord-soundbot-1.0.2\\node_modules\\node-opus\\build\\Debug\\node-opus.node',
     'C:\\Users\\varadi\\Desktop\\discord-soundbot-1.0.2\\node_modules\\node-opus\\build\\Release\\node-opus.node',
     'C:\\Users\\varadi\\Desktop\\discord-soundbot-1.0.2\\node_modules\\node-opus\\out\\Debug\\node-opus.node',
     'C:\\Users\\varadi\\Desktop\\discord-soundbot-1.0.2\\node_modules\\node-opus\\Debug\\node-opus.node',
     'C:\\Users\\varadi\\Desktop\\discord-soundbot-1.0.2\\node_modules\\node-opus\\out\\Release\\node-opus.node',
     'C:\\Users\\varadi\\Desktop\\discord-soundbot-1.0.2\\node_modules\\node-opus\\Release\\node-opus.node',
     'C:\\Users\\varadi\\Desktop\\discord-soundbot-1.0.2\\node_modules\\node-opus\\build\\default\\node-opus.node',
     'C:\\Users\\varadi\\Desktop\\discord-soundbot-1.0.2\\node_modules\\node-opus\\compiled\\8.11.4\\win32\\x64\\node-opus.node' ] }

Can you guys help me?

ffmpeg issue.

Any idea why? I installed ffmpeg and yet it is still not playing any sounds.


> [email protected] start /Users/dev/Desktop/discord-soundbot
> node bot.js

Use the following URL to let the bot join your server!
https://discordapp.com/oauth2/authorize?client_id=YYYY&scope=bot
Error occured!
Error: FFMPEG not found
    at Function.selectFfmpegCommand (/Users/dev/Desktop/discord-soundbot/node_modules/prism-media/src/transcoders/ffmpeg/Ffmpeg.js:46:13)
    at new FfmpegTranscoder (/Users/dev/Desktop/discord-soundbot/node_modules/prism-media/src/transcoders/ffmpeg/Ffmpeg.js:7:37)
    at new MediaTranscoder (/Users/dev/Desktop/discord-soundbot/node_modules/prism-media/src/transcoders/MediaTranscoder.js:10:19)
    at new Prism (/Users/dev/Desktop/discord-soundbot/node_modules/prism-media/src/Prism.js:5:23)
    at VoiceConnection (/Users/dev/Desktop/discord-soundbot/node_modules/discord.js/src/client/voice/VoiceConnection.js:45:18)
    at Promise (/Users/dev/Desktop/discord-soundbot/node_modules/discord.js/src/client/voice/ClientVoiceManager.js:63:22)
    at ClientVoiceManager.joinChannel (/Users/dev/Desktop/discord-soundbot/node_modules/discord.js/src/client/voice/ClientVoiceManager.js:45:12)
    at VoiceChannel.join (/Users/dev/Desktop/discord-soundbot/node_modules/discord.js/src/structures/VoiceChannel.js:114:30)
    at SoundBot.playSoundQueue (/Users/dev/Desktop/discord-soundbot/src/SoundBot.js:40:18)
    at MessageHandler.handle (/Users/dev/Desktop/discord-soundbot/src/MessageHandler.js:39:74)```

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.