Explorar o código

Docker and formatting

Alan Colon %!s(int64=7) %!d(string=hai) anos
pai
achega
cb78113fae
Modificáronse 8 ficheiros con 175 adicións e 8 borrados
  1. 2 0
      .gitignore
  2. 14 0
      Dockerfile
  3. 8 8
      bot.js
  4. 3 0
      build.sh
  5. 5 0
      docker-compose.yml
  6. 1 0
      package.json
  7. 56 0
      user-storage.js
  8. 86 0
      yarn.lock

+ 2 - 0
.gitignore

@@ -1 +1,3 @@
 node_modules/
+*.swp
+

+ 14 - 0
Dockerfile

@@ -0,0 +1,14 @@
+FROM node
+
+RUN npm install -g yarn
+
+COPY package.json /app/
+
+WORKDIR /app
+
+RUN yarn
+
+COPY * /app/
+
+CMD node bot.js
+

+ 8 - 8
bot.js

@@ -1,7 +1,7 @@
 const { Dice } = require('./dice')
-var Discord = require('discord.js');
+var { Client, Attachment } = require('discord.js');
 
-var bot = new Discord.Client()
+var bot = new Client()
 /*
 bot.on('ready', function() {
 //    console.log('ready', arguments)
@@ -15,14 +15,14 @@ bot.on('message', function(message) {
     console.log(`message from ${message.author.username}: ${message.content}`)
     if (response) {
         console.log(response)
-        message.reply(response)
+        const chatLine = response.split('[').join('`').split(']').join('`')
+          .replace(/= (\d+)\./g, (a, b) => `= **${b}**.`)
+        console.log(chatLine)
+        message.reply(chatLine)
     }
+
 });
-/*
-bot.on("any", function(event) {
-  console.log(event)
-});
-*/
+
 
 /*
 bot.on('channelCreate', function() { console.log('channelCreate', Array.from(arguments)) })

+ 3 - 0
build.sh

@@ -0,0 +1,3 @@
+#!/bin/bash
+docker build --tag dicebot .
+

+ 5 - 0
docker-compose.yml

@@ -0,0 +1,5 @@
+version: '2'
+services:
+  dicebot:
+    build: .
+    restart: always

+ 1 - 0
package.json

@@ -4,6 +4,7 @@
   "main": "index.js",
   "license": "MIT",
   "dependencies": {
+    "await-file": "^2.2.0",
     "discord.js": "^11.4.2"
   }
 }

+ 56 - 0
user-storage.js

@@ -0,0 +1,56 @@
+const fs = require('await-file')
+const Path = require('path')
+const { Snowflake } = require('discord.js')
+
+const storageDirectory = './users'
+
+const userDirectory = user => Path.join(storageDirectory, `${user.id}`)
+
+const userIndexFile = user => Path.join(userDirectory(user), 'index.json')
+
+const userStateFile = (user, snowflake) => Path.join(userDirectory, `${snowflake}.json`)
+
+const ensureUserDirectory = async user => {
+  if (!await fs.exists(userDirectory(user))) {
+    await fs.createDirectory(userDirectory(user))
+  }
+}
+
+const getIndex = async user => {
+  if (await fs.exists(userIndexFile(user)))
+    return JSON.parse(await fs.readFile(userIndexFile(user), 'utf8'))
+  return {}
+}
+
+const setIndex = async (user, index) => {
+  await ensureUserDirectory(user)
+  await fs.writeFile(userIndexFile(user), JSON.stringify(index))
+}
+
+const get = async (user) => {
+  const index = await getIndex(user)
+  if (!index.latest) return {}
+  return JSON.parse(await fs.readFile(userStateFile(index.latest)))
+}
+
+const set = async (user, object) => {
+  const json = JSON.stringify(object)
+  await ensureUserDirectory(user)
+  const index = await getIndex(user)
+  index.latest = Snowflake.generate()
+  await fs.writeFile(userStateFile(index.latest), json)
+  await setIndex(user, index)
+}
+
+
+module.exports = {
+  get,
+  set,
+  getIndex,
+  setIndex,
+  storageDirectory,
+  userDirectory,
+  userIndexFile,
+  userStateFile,
+  ensureUserDirectory
+}

+ 86 - 0
yarn.lock

@@ -7,6 +7,31 @@ async-limiter@~1.0.0:
   resolved "https://registry.yarnpkg.com/async-limiter/-/async-limiter-1.0.0.tgz#78faed8c3d074ab81f22b4e985d79e8738f720f8"
   integrity sha512-jp/uFnooOiO+L211eZOoSyzpOITMXx1rBITauYykG3BRYPu8h0UcxsPNB04RR5vo4Tyz3+ay17tR6JVf9qzYWg==
 
+await-file@^2.2.0:
+  version "2.2.0"
+  resolved "https://registry.yarnpkg.com/await-file/-/await-file-2.2.0.tgz#75648b65164cc791414e1d1372d807392cedbfa3"
+  integrity sha512-tLdAS8EWmykzs+JJZ0kPq3ItTcGNXlUYQ1/Br26xVAMfE1FhKcIhbtI4wR2DvHOQgSdv9/ZpFldkczEIVo5aLQ==
+  dependencies:
+    rimraf "^2.5.2"
+
+balanced-match@^1.0.0:
+  version "1.0.0"
+  resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767"
+  integrity sha1-ibTRmasr7kneFk6gK4nORi1xt2c=
+
+brace-expansion@^1.1.7:
+  version "1.1.11"
+  resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd"
+  integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==
+  dependencies:
+    balanced-match "^1.0.0"
+    concat-map "0.0.1"
+
+concat-map@0.0.1:
+  version "0.0.1"
+  resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b"
+  integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=
+
 discord.js@^11.4.2:
   version "11.4.2"
   resolved "https://registry.yarnpkg.com/discord.js/-/discord.js-11.4.2.tgz#54586981926521572051f2a30b984aad2b49786e"
@@ -18,16 +43,72 @@ discord.js@^11.4.2:
     tweetnacl "^1.0.0"
     ws "^4.0.0"
 
+fs.realpath@^1.0.0:
+  version "1.0.0"
+  resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f"
+  integrity sha1-FQStJSMVjKpA20onh8sBQRmU6k8=
+
+glob@^7.0.5:
+  version "7.1.3"
+  resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.3.tgz#3960832d3f1574108342dafd3a67b332c0969df1"
+  integrity sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ==
+  dependencies:
+    fs.realpath "^1.0.0"
+    inflight "^1.0.4"
+    inherits "2"
+    minimatch "^3.0.4"
+    once "^1.3.0"
+    path-is-absolute "^1.0.0"
+
+inflight@^1.0.4:
+  version "1.0.6"
+  resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9"
+  integrity sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=
+  dependencies:
+    once "^1.3.0"
+    wrappy "1"
+
+inherits@2:
+  version "2.0.3"
+  resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de"
+  integrity sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=
+
 long@^4.0.0:
   version "4.0.0"
   resolved "https://registry.yarnpkg.com/long/-/long-4.0.0.tgz#9a7b71cfb7d361a194ea555241c92f7468d5bf28"
   integrity sha512-XsP+KhQif4bjX1kbuSiySJFNAehNxgLb6hPRGJ9QsUr8ajHkuXGdrHmFUTUUXhDwVX2R5bY4JNZEwbUiMhV+MA==
 
+minimatch@^3.0.4:
+  version "3.0.4"
+  resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083"
+  integrity sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==
+  dependencies:
+    brace-expansion "^1.1.7"
+
+once@^1.3.0:
+  version "1.4.0"
+  resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1"
+  integrity sha1-WDsap3WWHUsROsF9nFC6753Xa9E=
+  dependencies:
+    wrappy "1"
+
+path-is-absolute@^1.0.0:
+  version "1.0.1"
+  resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f"
+  integrity sha1-F0uSaHNVNP+8es5r9TpanhtcX18=
+
 prism-media@^0.0.3:
   version "0.0.3"
   resolved "https://registry.yarnpkg.com/prism-media/-/prism-media-0.0.3.tgz#8842d4fae804f099d3b48a9a38e3c2bab6f4855b"
   integrity sha512-c9KkNifSMU/iXT8FFTaBwBMr+rdVcN+H/uNv1o+CuFeTThNZNTOrQ+RgXA1yL/DeLk098duAeRPP3QNPNbhxYQ==
 
+rimraf@^2.5.2:
+  version "2.6.2"
+  resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.6.2.tgz#2ed8150d24a16ea8651e6d6ef0f47c4158ce7a36"
+  integrity sha512-lreewLK/BlghmxtfH36YYVg1i8IAce4TI7oao75I1g245+6BctqTVQiBP3YUJ9C6DQOXJmkYR9X9fCLtCOJc5w==
+  dependencies:
+    glob "^7.0.5"
+
 safe-buffer@~5.1.0:
   version "5.1.2"
   resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d"
@@ -43,6 +124,11 @@ tweetnacl@^1.0.0:
   resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-1.0.0.tgz#713d8b818da42068740bf68386d0479e66fc8a7b"
   integrity sha1-cT2LgY2kIGh0C/aDhtBHnmb8ins=
 
+wrappy@1:
+  version "1.0.2"
+  resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f"
+  integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=
+
 ws@^4.0.0:
   version "4.1.0"
   resolved "https://registry.yarnpkg.com/ws/-/ws-4.1.0.tgz#a979b5d7d4da68bf54efe0408967c324869a7289"