Browse Source

Merge pull request #131 from oiclid/make_discord_bot

How to make a Discord Bot [Bounty 13]
Martin 3 years ago
parent
commit
3b97c29d84

+ 105 - 0
community-contributions/discordbot/README.md

@@ -0,0 +1,105 @@
+# How to Build a Discord Bot 
+
+This document is written in response to the first question of request for [Joystream's](joystream.org) Bounty [13](https://github.com/Joystream/community-repo/issues/123)
+
+## Getting Started
+
+Go to Discord's [bot portal](https://discordapp.com/developers/applications/) and create a new application, giving it an appropriate name.
+
+
+![Discord's application portal](images/bot1.png)
+
+
+ Copy and save the Client ID and secret (where the 2 arrows are pointing at), making sure you keep the secret secret.
+
+
+	![Client ID and Secret](images/bot2.jpg)
+
+So far, what you have is a simple application.
+
+You click on the Bot tab under settings to your left, and click on the "add a bot button". 
+
+![Bot's page](images/bot3.jpg)
+
+This would take you to your bot homepage. You'll be given a token, which you should take note off and keep safe. 
+
+ ![Bot's homepage](images/bot4.jpg)
+
+As an aside, never store any keys or tokens on GitHub, ESPECIALLY if the repo is public.
+
+
+## Developing the Bot
+
+While DIscord bots can be built with several different languages - the unofficial [Discord API  server](https://discord.gg/discord-api) has channels for at least 19 different languages -  I will concentrate on TypeScript.
+
+The [Discord TypeScript Server](https://discord.gg/VDjwu8E) is an ideal source for interacting with other TypeScript developers. as well as a potential source for any technical help one may need. There's also an [examples folder](https://github.com/OwenCalvin/discord.ts/tree/master/examples) of bots built using the Discord TypeScript library.
+
+### Installation
+Use [`npm`](https://www.npmjs.com/package/@typeit/discord) or `yarn` to install `@typeit/discord` with `discord.js`:
+```sh
+npm i @typeit/discord discord.js
+```
+
+Your tsconfig.json should look like this:
+```json
+{
+  "compilerOptions": {
+    "module": "commonjs",
+    "target": "es2017",
+    "noImplicitAny": false,
+    "sourceMap": true,
+    "outDir": "build",
+    "emitDecoratorMetadata": true,
+    "experimentalDecorators": true,
+    "importHelpers": true,
+    "forceConsistentCasingInFileNames": true,
+    "lib": [
+      "es2017",
+      "esnext.asynciterable"
+    ],
+    "moduleResolution": "node"
+  },
+  "exclude": [
+    "node_modules"
+  ]
+}
+```
+
+### Setup and start building your application
+NB:  To start your application, you must use the `discord.ts`'s Client and not the client that is provided by `discord.js.  
+It works the same as the `discord.js`'s `Client` (same methods, properties, ...).
+
+You have different parameters in addition to discord.js when you initialize your `Client`:
+- **`classes` (required)**:  
+Indicate the class jacket of your classes containing the `@Discord` decorator. It accepts a list of classes or of (glob) paths.
+
+- **`silent` (`false` by default)**:  
+Allows you to disable your event information at startup.
+
+- **`variablesChar` (`":"` by default)**:  
+Allows you to change the prefix character of a variable. 
+
+
+**You must specify the glob path(s) where your decorated classes are**
+
+```typescript
+// Use the Client that are provided by @typeit/discord NOT discord.js
+import { Client } from "@typeit/discord";
+
+async function start() {
+  const client = new Client({
+    classes: [
+      `${__dirname}/*Discord.ts`, // glob string to load the classes
+      `${__dirname}/*Discord.js` // If you compile using "tsc" the file extension change to .js
+    ],
+    silent: false,
+    variablesChar: ":"
+  });
+
+  await client.login("YOUR_TOKEN");
+}
+
+start();
+```
+
+

BIN
community-contributions/discordbot/images/bot1.png


BIN
community-contributions/discordbot/images/bot2.jpg


BIN
community-contributions/discordbot/images/bot3.jpg


BIN
community-contributions/discordbot/images/bot4.jpg