update
This commit is contained in:
parent
1fc983ac97
commit
39ee647d01
1
.gitignore
vendored
1
.gitignore
vendored
|
@ -0,0 +1 @@
|
|||
.env
|
|
@ -14,7 +14,7 @@ COPY . .
|
|||
RUN cargo build --release --bin server
|
||||
|
||||
# We do not need the Rust toolchain to run the binary!
|
||||
FROM debian:buster-slim AS runtime
|
||||
FROM debian AS runtime
|
||||
WORKDIR /app
|
||||
RUN apt-get update && apt-get install -y ca-certificates libssl-dev
|
||||
COPY --from=builder /app/target/release/server /usr/local/bin/server
|
||||
|
|
|
@ -1,19 +0,0 @@
|
|||
FROM node as builder
|
||||
|
||||
# Create app directory
|
||||
WORKDIR /usr/src/app
|
||||
# Install app dependencies
|
||||
COPY package*.json ./
|
||||
RUN npm i
|
||||
COPY . .
|
||||
RUN npm run build || true
|
||||
|
||||
FROM node:slim
|
||||
# Create app directory
|
||||
WORKDIR /usr/src/app
|
||||
# Install app dependencies
|
||||
COPY package*.json ./
|
||||
RUN npm i --omit=dev --production
|
||||
COPY --from=builder /usr/src/app/dist ./dist
|
||||
|
||||
CMD [ "node", "dist/index.mjs" ]
|
|
@ -1,59 +0,0 @@
|
|||
gateway:
|
||||
token: # You need to fill this!
|
||||
intents: 3276799
|
||||
shard: 0
|
||||
shard_total: 1
|
||||
|
||||
rest:
|
||||
discord:
|
||||
token: # You need to fill this!
|
||||
server:
|
||||
listening_adress: 0.0.0.0:8090
|
||||
ratelimiter_address: localhost # You need to change this to your ratelimit server address!
|
||||
ratelimiter_port: 8092
|
||||
|
||||
webhook:
|
||||
discord:
|
||||
public_key: # You need to fill this
|
||||
server:
|
||||
listening_adress: 0.0.0.0:8091
|
||||
|
||||
cache:
|
||||
toggles:
|
||||
- channels_cache
|
||||
- guilds_cache
|
||||
- guild_schedules_cache
|
||||
- stage_instances_cache
|
||||
- integrations_cache
|
||||
- members_cache
|
||||
- bans_cache
|
||||
- reactions_cache
|
||||
- messages_cache
|
||||
- threads_cache
|
||||
- invites_cache
|
||||
- roles_cache
|
||||
- automoderation_cache
|
||||
- voice_states_cache
|
||||
|
||||
ratelimiter:
|
||||
server:
|
||||
listening_adress: 0.0.0.0:8092
|
||||
|
||||
# Prometheus monitoring configuration
|
||||
monitoring:
|
||||
enabled: false
|
||||
address: 0.0.0.0
|
||||
port: 9000
|
||||
|
||||
# Nats broker configuration
|
||||
nats:
|
||||
host: nats
|
||||
|
||||
redis:
|
||||
url: redis://redis
|
||||
|
||||
#opentelemetry:
|
||||
# metrics:
|
||||
# endpoint: http://otelcol:4317
|
||||
# traces:
|
||||
# endpoint: http://otelcol:4317
|
|
@ -1,42 +0,0 @@
|
|||
{
|
||||
"name": "@discordnova/nova-quickstart",
|
||||
"version": "1.0.0",
|
||||
"description": "Simple example of a nova deployment",
|
||||
"main": "dist/index.js",
|
||||
"repository": "https://github.com/discordnova/nova-quickstart",
|
||||
"author": "MatthieuCoder",
|
||||
"type": "module",
|
||||
"license": "Apache-2.0",
|
||||
"dependencies": {
|
||||
"@discordnova/nova-cli": "0.0.5",
|
||||
"@discordnova/nova-js": "0.0.5",
|
||||
"source-map-support": "^0.5.21",
|
||||
"tslib": "^2.4.1",
|
||||
"undici": "^5.15.0"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@types/node": "^18.11.18",
|
||||
"discord-api-types": "^0.37.25",
|
||||
"typescript": "^5.0.0-dev.20230120",
|
||||
"xo": "^0.53.1"
|
||||
},
|
||||
"scripts": {
|
||||
"build": "tsc",
|
||||
"lint": "xo",
|
||||
"lint:fix": "xo --fix",
|
||||
"start": "tsc && node dist/index.mjs",
|
||||
"nova": "nova",
|
||||
"preprocess": "tsc && node dist/preprocess.mjs"
|
||||
},
|
||||
"xo": {
|
||||
"rules": {
|
||||
"import/extensions": "off",
|
||||
"unicorn/prefer-top-level-await": "off",
|
||||
"no-constructor-return": "off",
|
||||
"unicorn/no-array-reduce": "off",
|
||||
"import/no-unassigned-import": "off",
|
||||
"n/file-extension-in-import": "off"
|
||||
},
|
||||
"prettier": true
|
||||
}
|
||||
}
|
|
@ -1,89 +0,0 @@
|
|||
import "source-map-support";
|
||||
import {
|
||||
GatewayMessageCreateDispatch,
|
||||
RESTPostAPIChannelMessageJSONBody,
|
||||
Routes,
|
||||
} from "discord-api-types/v10";
|
||||
import { Client } from "@discordnova/nova-js/src/lib/client.js";
|
||||
import { request } from "undici";
|
||||
|
||||
// `autofeur_db` service
|
||||
export const DB = process.env.DB || "http://localhost:3000";
|
||||
// nats broker for connecting to nova
|
||||
export const NATS = process.env.NATS || "192.168.0.17:4222";
|
||||
// rest endpoint for connecting to nova
|
||||
export const REST = process.env.REST || "http://192.168.0.17:8090/api";
|
||||
|
||||
/**
|
||||
* Completes a grapheme using the `autofeur_db` service.
|
||||
* @param grapheme Grapheme to complete
|
||||
* @returns Completed grapheme
|
||||
*/
|
||||
export const completeWord = (grapheme: string) => {
|
||||
let resp = request(`${DB}?grapheme=${encodeURIComponent(grapheme)}`);
|
||||
return resp.then((x) => {
|
||||
if (x.statusCode === 200) {
|
||||
return x.body.text();
|
||||
}
|
||||
});
|
||||
};
|
||||
|
||||
/**
|
||||
* Cleans a sentence for usage with this program, strips unwanted chars
|
||||
* @param sentence Raw discord sentence
|
||||
* @returns The last word without any specials characters
|
||||
*/
|
||||
const cutWord = (sentence: string) => {
|
||||
let lastWord = sentence
|
||||
.split(" ")
|
||||
.slice(-1)[0]
|
||||
.replaceAll(/(\s)?([^\x41-\x5A\s^\x61-\x7A^\xC0-\xFF])/g, "");
|
||||
return lastWord;
|
||||
};
|
||||
|
||||
/**
|
||||
* Nova client for receiving events
|
||||
*/
|
||||
const emitter = new Client({
|
||||
transport: {
|
||||
additionalEvents: [],
|
||||
nats: {
|
||||
servers: [NATS],
|
||||
},
|
||||
queue: "autofeur_nova",
|
||||
},
|
||||
rest: {
|
||||
api: REST,
|
||||
},
|
||||
});
|
||||
|
||||
/**
|
||||
* Handle the message creation event
|
||||
*/
|
||||
emitter.on(
|
||||
"messageCreate",
|
||||
async (message: GatewayMessageCreateDispatch["d"]) => {
|
||||
// we shall not repond to bots
|
||||
if (message.author.bot) return;
|
||||
if (Math.random() > 0.7) {
|
||||
try {
|
||||
// Get the completed word found by the db.
|
||||
let response = await completeWord(cutWord(message.content));
|
||||
|
||||
// Ignore if there is no completion
|
||||
if (response || response === "") {
|
||||
// Respond to the message.
|
||||
await emitter.rest.post(Routes.channelMessages(message.channel_id), {
|
||||
body: {
|
||||
content: response,
|
||||
message_reference: { message_id: message.id },
|
||||
} as RESTPostAPIChannelMessageJSONBody,
|
||||
});
|
||||
}
|
||||
} catch (e) {}
|
||||
}
|
||||
}
|
||||
);
|
||||
|
||||
// Start the service (listening for events.)
|
||||
(async () => await emitter.start())();
|
|
@ -1,15 +0,0 @@
|
|||
{
|
||||
"compilerOptions": {
|
||||
"outDir": "dist",
|
||||
"downlevelIteration": true,
|
||||
"module": "es2022",
|
||||
"target": "ES6",
|
||||
"sourceMap": true,
|
||||
"lib": ["ES2022"],
|
||||
"moduleResolution": "NodeNext",
|
||||
"skipLibCheck": true,
|
||||
"incremental": true
|
||||
},
|
||||
|
||||
"exclude": ["node_modules"]
|
||||
}
|
File diff suppressed because it is too large
Load diff
|
@ -1,4 +1,4 @@
|
|||
FROM python:3.7.3-slim
|
||||
FROM python:slim
|
||||
COPY requirements.txt /
|
||||
RUN apt-get update && apt-get install -y build-essential
|
||||
RUN pip3 install -r /requirements.txt
|
||||
|
|
|
@ -1,3 +1,3 @@
|
|||
config/
|
||||
dist/
|
||||
node_modules/
|
||||
node_modules/
|
|
@ -2,4 +2,4 @@ bin/
|
|||
node_modules/
|
||||
dist/
|
||||
config/*
|
||||
!config/default.example.yml
|
||||
!config/default.example.yml
|
10
discordjs/Dockerfile
Normal file
10
discordjs/Dockerfile
Normal file
|
@ -0,0 +1,10 @@
|
|||
FROM node as builder
|
||||
|
||||
# Create app directory
|
||||
WORKDIR /usr/src/app
|
||||
# Install app dependencies
|
||||
COPY package*.json ./
|
||||
RUN npm i
|
||||
COPY . .
|
||||
|
||||
CMD [ "node", "src/index.mjs" ]
|
327
discordjs/package-lock.json
generated
Normal file
327
discordjs/package-lock.json
generated
Normal file
|
@ -0,0 +1,327 @@
|
|||
{
|
||||
"name": "discordjs",
|
||||
"version": "1.0.0",
|
||||
"lockfileVersion": 3,
|
||||
"requires": true,
|
||||
"packages": {
|
||||
"": {
|
||||
"name": "discordjs",
|
||||
"version": "1.0.0",
|
||||
"license": "ISC",
|
||||
"dependencies": {
|
||||
"discord.js": "^14.15.3",
|
||||
"undici": "^6.18.2"
|
||||
}
|
||||
},
|
||||
"node_modules/@discordjs/builders": {
|
||||
"version": "1.8.2",
|
||||
"resolved": "https://registry.npmjs.org/@discordjs/builders/-/builders-1.8.2.tgz",
|
||||
"integrity": "sha512-6wvG3QaCjtMu0xnle4SoOIeFB4y6fKMN6WZfy3BMKJdQQtPLik8KGzDwBVL/+wTtcE/ZlFjgEk74GublyEVZ7g==",
|
||||
"license": "Apache-2.0",
|
||||
"dependencies": {
|
||||
"@discordjs/formatters": "^0.4.0",
|
||||
"@discordjs/util": "^1.1.0",
|
||||
"@sapphire/shapeshift": "^3.9.7",
|
||||
"discord-api-types": "0.37.83",
|
||||
"fast-deep-equal": "^3.1.3",
|
||||
"ts-mixer": "^6.0.4",
|
||||
"tslib": "^2.6.2"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=16.11.0"
|
||||
},
|
||||
"funding": {
|
||||
"url": "https://github.com/discordjs/discord.js?sponsor"
|
||||
}
|
||||
},
|
||||
"node_modules/@discordjs/collection": {
|
||||
"version": "1.5.3",
|
||||
"resolved": "https://registry.npmjs.org/@discordjs/collection/-/collection-1.5.3.tgz",
|
||||
"integrity": "sha512-SVb428OMd3WO1paV3rm6tSjM4wC+Kecaa1EUGX7vc6/fddvw/6lg90z4QtCqm21zvVe92vMMDt9+DkIvjXImQQ==",
|
||||
"license": "Apache-2.0",
|
||||
"engines": {
|
||||
"node": ">=16.11.0"
|
||||
}
|
||||
},
|
||||
"node_modules/@discordjs/formatters": {
|
||||
"version": "0.4.0",
|
||||
"resolved": "https://registry.npmjs.org/@discordjs/formatters/-/formatters-0.4.0.tgz",
|
||||
"integrity": "sha512-fJ06TLC1NiruF35470q3Nr1bi95BdvKFAF+T5bNfZJ4bNdqZ3VZ+Ttg6SThqTxm6qumSG3choxLBHMC69WXNXQ==",
|
||||
"license": "Apache-2.0",
|
||||
"dependencies": {
|
||||
"discord-api-types": "0.37.83"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=16.11.0"
|
||||
},
|
||||
"funding": {
|
||||
"url": "https://github.com/discordjs/discord.js?sponsor"
|
||||
}
|
||||
},
|
||||
"node_modules/@discordjs/rest": {
|
||||
"version": "2.3.0",
|
||||
"resolved": "https://registry.npmjs.org/@discordjs/rest/-/rest-2.3.0.tgz",
|
||||
"integrity": "sha512-C1kAJK8aSYRv3ZwMG8cvrrW4GN0g5eMdP8AuN8ODH5DyOCbHgJspze1my3xHOAgwLJdKUbWNVyAeJ9cEdduqIg==",
|
||||
"license": "Apache-2.0",
|
||||
"dependencies": {
|
||||
"@discordjs/collection": "^2.1.0",
|
||||
"@discordjs/util": "^1.1.0",
|
||||
"@sapphire/async-queue": "^1.5.2",
|
||||
"@sapphire/snowflake": "^3.5.3",
|
||||
"@vladfrangu/async_event_emitter": "^2.2.4",
|
||||
"discord-api-types": "0.37.83",
|
||||
"magic-bytes.js": "^1.10.0",
|
||||
"tslib": "^2.6.2",
|
||||
"undici": "6.13.0"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=16.11.0"
|
||||
},
|
||||
"funding": {
|
||||
"url": "https://github.com/discordjs/discord.js?sponsor"
|
||||
}
|
||||
},
|
||||
"node_modules/@discordjs/rest/node_modules/@discordjs/collection": {
|
||||
"version": "2.1.0",
|
||||
"resolved": "https://registry.npmjs.org/@discordjs/collection/-/collection-2.1.0.tgz",
|
||||
"integrity": "sha512-mLcTACtXUuVgutoznkh6hS3UFqYirDYAg5Dc1m8xn6OvPjetnUlf/xjtqnnc47OwWdaoCQnHmHh9KofhD6uRqw==",
|
||||
"license": "Apache-2.0",
|
||||
"engines": {
|
||||
"node": ">=18"
|
||||
},
|
||||
"funding": {
|
||||
"url": "https://github.com/discordjs/discord.js?sponsor"
|
||||
}
|
||||
},
|
||||
"node_modules/@discordjs/rest/node_modules/undici": {
|
||||
"version": "6.13.0",
|
||||
"resolved": "https://registry.npmjs.org/undici/-/undici-6.13.0.tgz",
|
||||
"integrity": "sha512-Q2rtqmZWrbP8nePMq7mOJIN98M0fYvSgV89vwl/BQRT4mDOeY2GXZngfGpcBBhtky3woM7G24wZV3Q304Bv6cw==",
|
||||
"license": "MIT",
|
||||
"engines": {
|
||||
"node": ">=18.0"
|
||||
}
|
||||
},
|
||||
"node_modules/@discordjs/util": {
|
||||
"version": "1.1.0",
|
||||
"resolved": "https://registry.npmjs.org/@discordjs/util/-/util-1.1.0.tgz",
|
||||
"integrity": "sha512-IndcI5hzlNZ7GS96RV3Xw1R2kaDuXEp7tRIy/KlhidpN/BQ1qh1NZt3377dMLTa44xDUNKT7hnXkA/oUAzD/lg==",
|
||||
"license": "Apache-2.0",
|
||||
"engines": {
|
||||
"node": ">=16.11.0"
|
||||
},
|
||||
"funding": {
|
||||
"url": "https://github.com/discordjs/discord.js?sponsor"
|
||||
}
|
||||
},
|
||||
"node_modules/@discordjs/ws": {
|
||||
"version": "1.1.1",
|
||||
"resolved": "https://registry.npmjs.org/@discordjs/ws/-/ws-1.1.1.tgz",
|
||||
"integrity": "sha512-PZ+vLpxGCRtmr2RMkqh8Zp+BenUaJqlS6xhgWKEZcgC/vfHLEzpHtKkB0sl3nZWpwtcKk6YWy+pU3okL2I97FA==",
|
||||
"license": "Apache-2.0",
|
||||
"dependencies": {
|
||||
"@discordjs/collection": "^2.1.0",
|
||||
"@discordjs/rest": "^2.3.0",
|
||||
"@discordjs/util": "^1.1.0",
|
||||
"@sapphire/async-queue": "^1.5.2",
|
||||
"@types/ws": "^8.5.10",
|
||||
"@vladfrangu/async_event_emitter": "^2.2.4",
|
||||
"discord-api-types": "0.37.83",
|
||||
"tslib": "^2.6.2",
|
||||
"ws": "^8.16.0"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=16.11.0"
|
||||
},
|
||||
"funding": {
|
||||
"url": "https://github.com/discordjs/discord.js?sponsor"
|
||||
}
|
||||
},
|
||||
"node_modules/@discordjs/ws/node_modules/@discordjs/collection": {
|
||||
"version": "2.1.0",
|
||||
"resolved": "https://registry.npmjs.org/@discordjs/collection/-/collection-2.1.0.tgz",
|
||||
"integrity": "sha512-mLcTACtXUuVgutoznkh6hS3UFqYirDYAg5Dc1m8xn6OvPjetnUlf/xjtqnnc47OwWdaoCQnHmHh9KofhD6uRqw==",
|
||||
"license": "Apache-2.0",
|
||||
"engines": {
|
||||
"node": ">=18"
|
||||
},
|
||||
"funding": {
|
||||
"url": "https://github.com/discordjs/discord.js?sponsor"
|
||||
}
|
||||
},
|
||||
"node_modules/@sapphire/async-queue": {
|
||||
"version": "1.5.2",
|
||||
"resolved": "https://registry.npmjs.org/@sapphire/async-queue/-/async-queue-1.5.2.tgz",
|
||||
"integrity": "sha512-7X7FFAA4DngXUl95+hYbUF19bp1LGiffjJtu7ygrZrbdCSsdDDBaSjB7Akw0ZbOu6k0xpXyljnJ6/RZUvLfRdg==",
|
||||
"license": "MIT",
|
||||
"engines": {
|
||||
"node": ">=v14.0.0",
|
||||
"npm": ">=7.0.0"
|
||||
}
|
||||
},
|
||||
"node_modules/@sapphire/shapeshift": {
|
||||
"version": "3.9.7",
|
||||
"resolved": "https://registry.npmjs.org/@sapphire/shapeshift/-/shapeshift-3.9.7.tgz",
|
||||
"integrity": "sha512-4It2mxPSr4OGn4HSQWGmhFMsNFGfFVhWeRPCRwbH972Ek2pzfGRZtb0pJ4Ze6oIzcyh2jw7nUDa6qGlWofgd9g==",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"fast-deep-equal": "^3.1.3",
|
||||
"lodash": "^4.17.21"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=v16"
|
||||
}
|
||||
},
|
||||
"node_modules/@sapphire/snowflake": {
|
||||
"version": "3.5.3",
|
||||
"resolved": "https://registry.npmjs.org/@sapphire/snowflake/-/snowflake-3.5.3.tgz",
|
||||
"integrity": "sha512-jjmJywLAFoWeBi1W7994zZyiNWPIiqRRNAmSERxyg93xRGzNYvGjlZ0gR6x0F4gPRi2+0O6S71kOZYyr3cxaIQ==",
|
||||
"license": "MIT",
|
||||
"engines": {
|
||||
"node": ">=v14.0.0",
|
||||
"npm": ">=7.0.0"
|
||||
}
|
||||
},
|
||||
"node_modules/@types/node": {
|
||||
"version": "20.14.2",
|
||||
"resolved": "https://registry.npmjs.org/@types/node/-/node-20.14.2.tgz",
|
||||
"integrity": "sha512-xyu6WAMVwv6AKFLB+e/7ySZVr/0zLCzOa7rSpq6jNwpqOrUbcACDWC+53d4n2QHOnDou0fbIsg8wZu/sxrnI4Q==",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"undici-types": "~5.26.4"
|
||||
}
|
||||
},
|
||||
"node_modules/@types/ws": {
|
||||
"version": "8.5.10",
|
||||
"resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.5.10.tgz",
|
||||
"integrity": "sha512-vmQSUcfalpIq0R9q7uTo2lXs6eGIpt9wtnLdMv9LVpIjCA/+ufZRozlVoVelIYixx1ugCBKDhn89vnsEGOCx9A==",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"@types/node": "*"
|
||||
}
|
||||
},
|
||||
"node_modules/@vladfrangu/async_event_emitter": {
|
||||
"version": "2.2.4",
|
||||
"resolved": "https://registry.npmjs.org/@vladfrangu/async_event_emitter/-/async_event_emitter-2.2.4.tgz",
|
||||
"integrity": "sha512-ButUPz9E9cXMLgvAW8aLAKKJJsPu1dY1/l/E8xzLFuysowXygs6GBcyunK9rnGC4zTsnIc2mQo71rGw9U+Ykug==",
|
||||
"license": "MIT",
|
||||
"engines": {
|
||||
"node": ">=v14.0.0",
|
||||
"npm": ">=7.0.0"
|
||||
}
|
||||
},
|
||||
"node_modules/discord-api-types": {
|
||||
"version": "0.37.83",
|
||||
"resolved": "https://registry.npmjs.org/discord-api-types/-/discord-api-types-0.37.83.tgz",
|
||||
"integrity": "sha512-urGGYeWtWNYMKnYlZnOnDHm8fVRffQs3U0SpE8RHeiuLKb/u92APS8HoQnPTFbnXmY1vVnXjXO4dOxcAn3J+DA==",
|
||||
"license": "MIT"
|
||||
},
|
||||
"node_modules/discord.js": {
|
||||
"version": "14.15.3",
|
||||
"resolved": "https://registry.npmjs.org/discord.js/-/discord.js-14.15.3.tgz",
|
||||
"integrity": "sha512-/UJDQO10VuU6wQPglA4kz2bw2ngeeSbogiIPx/TsnctfzV/tNf+q+i1HlgtX1OGpeOBpJH9erZQNO5oRM2uAtQ==",
|
||||
"license": "Apache-2.0",
|
||||
"dependencies": {
|
||||
"@discordjs/builders": "^1.8.2",
|
||||
"@discordjs/collection": "1.5.3",
|
||||
"@discordjs/formatters": "^0.4.0",
|
||||
"@discordjs/rest": "^2.3.0",
|
||||
"@discordjs/util": "^1.1.0",
|
||||
"@discordjs/ws": "^1.1.1",
|
||||
"@sapphire/snowflake": "3.5.3",
|
||||
"discord-api-types": "0.37.83",
|
||||
"fast-deep-equal": "3.1.3",
|
||||
"lodash.snakecase": "4.1.1",
|
||||
"tslib": "2.6.2",
|
||||
"undici": "6.13.0"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=16.11.0"
|
||||
},
|
||||
"funding": {
|
||||
"url": "https://github.com/discordjs/discord.js?sponsor"
|
||||
}
|
||||
},
|
||||
"node_modules/discord.js/node_modules/undici": {
|
||||
"version": "6.13.0",
|
||||
"resolved": "https://registry.npmjs.org/undici/-/undici-6.13.0.tgz",
|
||||
"integrity": "sha512-Q2rtqmZWrbP8nePMq7mOJIN98M0fYvSgV89vwl/BQRT4mDOeY2GXZngfGpcBBhtky3woM7G24wZV3Q304Bv6cw==",
|
||||
"license": "MIT",
|
||||
"engines": {
|
||||
"node": ">=18.0"
|
||||
}
|
||||
},
|
||||
"node_modules/fast-deep-equal": {
|
||||
"version": "3.1.3",
|
||||
"resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz",
|
||||
"integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==",
|
||||
"license": "MIT"
|
||||
},
|
||||
"node_modules/lodash": {
|
||||
"version": "4.17.21",
|
||||
"resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz",
|
||||
"integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==",
|
||||
"license": "MIT"
|
||||
},
|
||||
"node_modules/lodash.snakecase": {
|
||||
"version": "4.1.1",
|
||||
"resolved": "https://registry.npmjs.org/lodash.snakecase/-/lodash.snakecase-4.1.1.tgz",
|
||||
"integrity": "sha512-QZ1d4xoBHYUeuouhEq3lk3Uq7ldgyFXGBhg04+oRLnIz8o9T65Eh+8YdroUwn846zchkA9yDsDl5CVVaV2nqYw==",
|
||||
"license": "MIT"
|
||||
},
|
||||
"node_modules/magic-bytes.js": {
|
||||
"version": "1.10.0",
|
||||
"resolved": "https://registry.npmjs.org/magic-bytes.js/-/magic-bytes.js-1.10.0.tgz",
|
||||
"integrity": "sha512-/k20Lg2q8LE5xiaaSkMXk4sfvI+9EGEykFS4b0CHHGWqDYU0bGUFSwchNOMA56D7TCs9GwVTkqe9als1/ns8UQ==",
|
||||
"license": "MIT"
|
||||
},
|
||||
"node_modules/ts-mixer": {
|
||||
"version": "6.0.4",
|
||||
"resolved": "https://registry.npmjs.org/ts-mixer/-/ts-mixer-6.0.4.tgz",
|
||||
"integrity": "sha512-ufKpbmrugz5Aou4wcr5Wc1UUFWOLhq+Fm6qa6P0w0K5Qw2yhaUoiWszhCVuNQyNwrlGiscHOmqYoAox1PtvgjA==",
|
||||
"license": "MIT"
|
||||
},
|
||||
"node_modules/tslib": {
|
||||
"version": "2.6.2",
|
||||
"resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz",
|
||||
"integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==",
|
||||
"license": "0BSD"
|
||||
},
|
||||
"node_modules/undici": {
|
||||
"version": "6.18.2",
|
||||
"resolved": "https://registry.npmjs.org/undici/-/undici-6.18.2.tgz",
|
||||
"integrity": "sha512-o/MQLTwRm9IVhOqhZ0NQ9oXax1ygPjw6Vs+Vq/4QRjbOAC3B1GCHy7TYxxbExKlb7bzDRzt9vBWU6BDz0RFfYg==",
|
||||
"license": "MIT",
|
||||
"engines": {
|
||||
"node": ">=18.17"
|
||||
}
|
||||
},
|
||||
"node_modules/undici-types": {
|
||||
"version": "5.26.5",
|
||||
"resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz",
|
||||
"integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==",
|
||||
"license": "MIT"
|
||||
},
|
||||
"node_modules/ws": {
|
||||
"version": "8.17.0",
|
||||
"resolved": "https://registry.npmjs.org/ws/-/ws-8.17.0.tgz",
|
||||
"integrity": "sha512-uJq6108EgZMAl20KagGkzCKfMEjxmKvZHG7Tlq0Z6nOky7YF7aq4mOx6xK8TJ/i1LeK4Qus7INktacctDgY8Ow==",
|
||||
"license": "MIT",
|
||||
"engines": {
|
||||
"node": ">=10.0.0"
|
||||
},
|
||||
"peerDependencies": {
|
||||
"bufferutil": "^4.0.1",
|
||||
"utf-8-validate": ">=5.0.2"
|
||||
},
|
||||
"peerDependenciesMeta": {
|
||||
"bufferutil": {
|
||||
"optional": true
|
||||
},
|
||||
"utf-8-validate": {
|
||||
"optional": true
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
16
discordjs/package.json
Normal file
16
discordjs/package.json
Normal file
|
@ -0,0 +1,16 @@
|
|||
{
|
||||
"name": "discordjs",
|
||||
"version": "1.0.0",
|
||||
"main": "index.js",
|
||||
"scripts": {
|
||||
"test": "echo \"Error: no test specified\" && exit 1"
|
||||
},
|
||||
"author": "",
|
||||
"type": "module",
|
||||
"license": "ISC",
|
||||
"description": "",
|
||||
"dependencies": {
|
||||
"discord.js": "^14.15.3",
|
||||
"undici": "^6.18.2"
|
||||
}
|
||||
}
|
57
discordjs/src/index.mjs
Normal file
57
discordjs/src/index.mjs
Normal file
|
@ -0,0 +1,57 @@
|
|||
// Require the necessary discord.js classes
|
||||
import { Client, GatewayIntentBits } from 'discord.js';
|
||||
import { request } from "undici";
|
||||
|
||||
// Create a new client instance
|
||||
const client = new Client({ intents: [GatewayIntentBits.Guilds, GatewayIntentBits.MessageContent, GatewayIntentBits.GuildMessages] });
|
||||
|
||||
// `autofeur_db` service
|
||||
export const DB = process.env.DB || "http://localhost:3000";
|
||||
|
||||
/**
|
||||
* Completes a grapheme using the `autofeur_db` service.
|
||||
* @param grapheme Grapheme to complete
|
||||
* @returns Completed grapheme
|
||||
*/
|
||||
export const completeWord = (grapheme) => {
|
||||
let resp = request(`${DB}?grapheme=${encodeURIComponent(grapheme)}`);
|
||||
return resp.then((x) => {
|
||||
if (x.statusCode === 200) {
|
||||
return x.body.text();
|
||||
}
|
||||
});
|
||||
};
|
||||
|
||||
/**
|
||||
* Cleans a sentence for usage with this program, strips unwanted chars
|
||||
* @param sentence Raw discord sentence
|
||||
* @returns The last word without any specials characters
|
||||
*/
|
||||
const cutWord = (sentence) => {
|
||||
let lastWord = sentence
|
||||
.split(" ")
|
||||
.slice(-1)[0]
|
||||
.replaceAll(/(\s)?([^\x41-\x5A\s^\x61-\x7A^\xC0-\xFF])/g, "");
|
||||
return lastWord;
|
||||
};
|
||||
|
||||
client.on("messageCreate", async (message) => {
|
||||
// we shall not repond to bots
|
||||
if (message.author.bot) return;
|
||||
|
||||
if (Math.random() > 0.6) {
|
||||
try {
|
||||
// Get the completed word found by the db.
|
||||
let response = await completeWord(cutWord(message.content));
|
||||
|
||||
// Ignore if there is no completion
|
||||
if (response || response === "") {
|
||||
message.reply(response);
|
||||
}
|
||||
} catch (e) {
|
||||
console.log(e);
|
||||
}
|
||||
}
|
||||
})
|
||||
|
||||
client.login(process.env.TOKEN);
|
|
@ -1,25 +1,25 @@
|
|||
version: "3.3"
|
||||
services:
|
||||
autofeur_nova:
|
||||
build: autofeur_nova
|
||||
discordjs_bot:
|
||||
build: discordjs
|
||||
restart: always
|
||||
env_file: .env
|
||||
depends_on:
|
||||
- autofeur_db
|
||||
- nats
|
||||
environment:
|
||||
- NATS=nats
|
||||
- REST=http://rest:8090/api
|
||||
- DB=http://autofeur_db:3000/
|
||||
|
||||
autofeur_db:
|
||||
build: autofeur_db
|
||||
restart: always
|
||||
ports:
|
||||
- 3000:3000
|
||||
depends_on:
|
||||
- deep_phonemizer
|
||||
environment:
|
||||
- PHONEMIZER=http://deep_phonemizer:8000/
|
||||
volumes:
|
||||
- ./autofeur_db/assets/db.bin:/app/assets/db.bin
|
||||
|
||||
deep_phonemizer:
|
||||
build: deep_phonemizer
|
||||
restart: always
|
||||
|
@ -27,54 +27,10 @@ services:
|
|||
- 8000:8000
|
||||
volumes:
|
||||
- ./deep_phonemizer/assets/model.pt:/app/assets/model.pt
|
||||
nats:
|
||||
image: nats
|
||||
restart: always
|
||||
|
||||
redis:
|
||||
image: redis
|
||||
restart: always
|
||||
|
||||
cache:
|
||||
image: ghcr.io/discordnova/nova/cache
|
||||
restart: always
|
||||
volumes:
|
||||
- ./autofeur_nova/config/default.yml:/config/default.yml
|
||||
depends_on:
|
||||
- nats
|
||||
- redis
|
||||
|
||||
gateway0:
|
||||
image: ghcr.io/discordnova/nova/gateway
|
||||
restart: always
|
||||
environment:
|
||||
- NOVA__GATEWAY__SHARD=0
|
||||
volumes:
|
||||
- ./autofeur_nova/config/default.yml:/config/default.yml
|
||||
depends_on:
|
||||
- nats
|
||||
|
||||
rest:
|
||||
image: ghcr.io/discordnova/nova/rest
|
||||
restart: always
|
||||
volumes:
|
||||
- ./autofeur_nova/config/default.yml:/config/default.yml
|
||||
depends_on:
|
||||
- ratelimiter
|
||||
|
||||
webhook:
|
||||
image: ghcr.io/discordnova/nova/webhook
|
||||
restart: always
|
||||
volumes:
|
||||
- ./autofeur_nova/config/default.yml:/config/default.yml
|
||||
depends_on:
|
||||
- nats
|
||||
|
||||
ratelimiter:
|
||||
image: ghcr.io/discordnova/nova/ratelimit
|
||||
restart: always
|
||||
volumes:
|
||||
- ./autofeur_nova/config/default.yml:/config/default.yml
|
||||
depends_on:
|
||||
- nats
|
||||
- redis
|
||||
deploy:
|
||||
resources:
|
||||
reservations:
|
||||
devices:
|
||||
- driver: nvidia
|
||||
count: 1
|
||||
capabilities: [gpu]
|
||||
|
|
Loading…
Reference in a new issue