Envoie du Bot
This commit is contained in:
commit
abb2625b19
38
README.md
Normal file
38
README.md
Normal file
|
@ -0,0 +1,38 @@
|
||||||
|
# DeepL - Traducteur automatique Discord
|
||||||
|
|
||||||
|
Les joueurs ne doivent pas être séparés en raison de la barrière de la langue.
|
||||||
|
|
||||||
|
## Usage
|
||||||
|
|
||||||
|
Déployez cette application n'importe où.
|
||||||
|
|
||||||
|
|
||||||
|
### Données d'intentification
|
||||||
|
|
||||||
|
Il y a une façon de définir les données secrètes :
|
||||||
|
|
||||||
|
1. Mettre les ID dans le fichier `auth.json`
|
||||||
|
|
||||||
|
Créer un fichier JSON qui contient les ID :
|
||||||
|
|
||||||
|
```
|
||||||
|
{
|
||||||
|
"token": "le token du bot discord",
|
||||||
|
"auth_key" : "la clé API de DeepL"
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
Installez votre bot dans votre serveur discord, et lancez l'application.
|
||||||
|
|
||||||
|
## Configuration de la langue cible
|
||||||
|
|
||||||
|
Ajoutez cette ligne dans le sujet du salon dont vous voulez traduire les messages.
|
||||||
|
|
||||||
|
```
|
||||||
|
deepl-translate(EN)
|
||||||
|
```
|
||||||
|
|
||||||
|
Remplacez *EN* par la langue voulu.
|
||||||
|
|
||||||
|
ATTENTION, tout les messages posté dans le salon sera traduit !
|
||||||
|
Egalement, il faut 1 salon par langue.
|
6
heartbeat.js
Normal file
6
heartbeat.js
Normal file
|
@ -0,0 +1,6 @@
|
||||||
|
const express = require('express');
|
||||||
|
const app = express();
|
||||||
|
|
||||||
|
app.get('/heartbeat', (req, res) => res.send('alive'));
|
||||||
|
|
||||||
|
app.listen(process.env.PORT, () => console.log("/heartbeat est à l'écoute."));
|
111
index.js
Normal file
111
index.js
Normal file
|
@ -0,0 +1,111 @@
|
||||||
|
const { Client, MessageEmbed } = require('discord.js');
|
||||||
|
const axios = require('axios');
|
||||||
|
const fs = require('fs');
|
||||||
|
|
||||||
|
const DEFAULT_LANG = 'FR';
|
||||||
|
const AUTH_FILE = './auth.json';
|
||||||
|
|
||||||
|
const auth_key = require("./auth.json");
|
||||||
|
const token = require("./auth.json");
|
||||||
|
|
||||||
|
const client = new Client();
|
||||||
|
|
||||||
|
client.once('ready', () => {
|
||||||
|
console.log('Ready!');
|
||||||
|
});
|
||||||
|
|
||||||
|
let activites = ['Prêt pour vos traductions, Créer par Lantium !'], i = 0;
|
||||||
|
|
||||||
|
setInterval(() => client.user.setPresence({ activity: { name: `${activites [i++ % activites.length]}`, type: 'PLAYING' }, status: 'online' }), 5000);
|
||||||
|
|
||||||
|
client.on('message', message => {
|
||||||
|
|
||||||
|
if (message.author.bot) return;
|
||||||
|
if (!message.channel.topic) return;
|
||||||
|
const translationConfig = message.channel.topic.trim().match(/deepl-translate\((.+)\)/);
|
||||||
|
if (!translationConfig) return;
|
||||||
|
|
||||||
|
const target_lang = translationConfig[1];
|
||||||
|
if (!target_lang) return;
|
||||||
|
|
||||||
|
post(message.content, target_lang)
|
||||||
|
.then(response => {
|
||||||
|
|
||||||
|
// if source text's language was same as target language, text was translated into default language.
|
||||||
|
if (response.data.translations.length === 1 &&
|
||||||
|
response.data.translations[0].detected_source_language === target_lang) {
|
||||||
|
post(message.content, DEFAULT_LANG)
|
||||||
|
.then(retry => {
|
||||||
|
send(message, [ { lang: DEFAULT_LANG, translations: retry.data.translations } ]);
|
||||||
|
})
|
||||||
|
|
||||||
|
// if souce text's language was neither target language nor default language
|
||||||
|
// add default language translation.
|
||||||
|
} else if (
|
||||||
|
response.data.translations[0].detected_source_language !== target_lang
|
||||||
|
&&
|
||||||
|
response.data.translations[0].detected_source_language !== DEFAULT_LANG) {
|
||||||
|
post(message.content, DEFAULT_LANG)
|
||||||
|
.then(retry => {
|
||||||
|
send(message,
|
||||||
|
[
|
||||||
|
{
|
||||||
|
lang: target_lang,
|
||||||
|
translations: response.data.translations
|
||||||
|
},
|
||||||
|
{
|
||||||
|
lang: DEFAULT_LANG,
|
||||||
|
translations: retry.data.translations
|
||||||
|
}
|
||||||
|
]);
|
||||||
|
})
|
||||||
|
|
||||||
|
// text was translated into target language.
|
||||||
|
} else {
|
||||||
|
send(message, [ { lang: target_lang, translations: response.data.translations } ]);
|
||||||
|
}
|
||||||
|
})
|
||||||
|
});
|
||||||
|
|
||||||
|
const post = (message, lang) => {
|
||||||
|
return axios.post('https://api.deepl.com/v2/translate?' +
|
||||||
|
'auth_key=' + auth_key +'&' +
|
||||||
|
'text=' + encodeURIComponent(message) + '&' +
|
||||||
|
'target_lang=' + lang)
|
||||||
|
}
|
||||||
|
|
||||||
|
const send = (message, translations) => {
|
||||||
|
const embed = new MessageEmbed()
|
||||||
|
.setAuthor(message.author.username, message.author.avatarURL())
|
||||||
|
.setColor(0xff0000)
|
||||||
|
.setDescription(
|
||||||
|
translations.map(t => {
|
||||||
|
let text = '`' + t.lang + ':` ' + t.translations[0].text;
|
||||||
|
if (t.translations.length > 1) {
|
||||||
|
text += ' (';
|
||||||
|
text += t.translations.slice(1).map(others =>
|
||||||
|
(others.detected_source_language + ': ' + others.text ))
|
||||||
|
.join(', ');
|
||||||
|
text += ')';
|
||||||
|
}
|
||||||
|
return text;
|
||||||
|
})
|
||||||
|
.join('\n'));
|
||||||
|
message.channel.send(embed);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (fs.existsSync(AUTH_FILE)) {
|
||||||
|
console.log('auth: using auth file.');
|
||||||
|
var auth = require(AUTH_FILE);
|
||||||
|
token = auth.token;
|
||||||
|
auth_key = auth.auth_key;
|
||||||
|
} else {
|
||||||
|
console.log('auth: not found.');
|
||||||
|
process.exit(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (process.env.KEEP_ALIVE_ENDPOINT) {
|
||||||
|
require('./heartbeat');
|
||||||
|
}
|
||||||
|
|
||||||
|
client.login(token);
|
29
package.json
Normal file
29
package.json
Normal file
|
@ -0,0 +1,29 @@
|
||||||
|
{
|
||||||
|
"name": "lanbot-translate",
|
||||||
|
"version": "1.0.0",
|
||||||
|
"description": "Bot de traduction utilisant l'API de Deepl",
|
||||||
|
"main": "index.js",
|
||||||
|
"scripts": {
|
||||||
|
"start": "node index.js",
|
||||||
|
"test": "test"
|
||||||
|
},
|
||||||
|
"engines": {
|
||||||
|
"node": "12.x"
|
||||||
|
},
|
||||||
|
"repository": {
|
||||||
|
"type": "git",
|
||||||
|
"url": "git+https://gitlab.ataxya.net/lantium/lanbot-translate.git"
|
||||||
|
},
|
||||||
|
"author": "lantium#9402",
|
||||||
|
"license": "MIT",
|
||||||
|
"bugs": {
|
||||||
|
"url": "https://gitlab.ataxya.net/lantium/lanbot-translate/-/issues"
|
||||||
|
},
|
||||||
|
"homepage": "https://gitlab.ataxya.net/lantium/lanbot-translate/-/blob/master/README.md",
|
||||||
|
"dependencies": {
|
||||||
|
"axios": "^0.21.1",
|
||||||
|
"discord.js": "^12.5.3",
|
||||||
|
"eslint": "^7.32.0",
|
||||||
|
"express": "^4.17.1"
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user