Skip to content

Commit 55ea629

Browse files
authored
Merge pull request #16 from AleksandrSherehkov/feature/bot
feat: implement message cleaning and Markdown code block wrapping
2 parents fe6e7a2 + 2f341aa commit 55ea629

File tree

2 files changed

+41
-16
lines changed

2 files changed

+41
-16
lines changed

dreamland.js

+21-16
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,10 @@
11
const fetch = require('node-fetch');
2+
const {
3+
cleanMessage,
4+
wrapInCodeBlock,
5+
escapeMarkdown,
6+
} = require('./telegram/utils');
7+
28
const api = 'https://dreamland.rocks/api';
39

410
let toDream = Promise.resolve();
@@ -39,22 +45,22 @@ class DreamLand {
3945
}
4046

4147
async sendReport(type, args) {
42-
const escapeMarkdown = text => {
43-
return text.replace(/([_*[\]()~`>#+\-=|{}.!])/g, '\\$1');
44-
};
45-
4648
const { url, title } = this.types[type];
49+
50+
const cleanedMessage = cleanMessage(args.message);
51+
const wrappedMessage = wrapInCodeBlock(cleanedMessage);
52+
4753
const response = await enqueueToDream(`${api}${url}`, this.options(args));
4854

4955
let result;
5056

5157
if (response.ok) {
52-
const { id, message } = args;
58+
const { id } = args;
5359

5460
result =
5561
`${title}` +
5662
`*Відправник:* ${escapeMarkdown(id)}\n` +
57-
`*Текст:* ${escapeMarkdown(message)}\n\n` +
63+
`${wrappedMessage}` +
5864
`${title.trim()} успішно надіслано.`;
5965
} else {
6066
result = `Цей користувач Telegram не повʼязан з жодним персонажем. Використовуй *'режим телеграм'* у грі.`;
@@ -73,7 +79,6 @@ class DreamLand {
7379
if (who.total === 0) {
7480
result = 'У світі нікого немає!';
7581
} else {
76-
result = '```';
7782
if (who.people && who.people.length > 0)
7883
result +=
7984
'\nЗараз у світі:\n\n' +
@@ -92,10 +97,10 @@ class DreamLand {
9297
'\n\nЧують канали: ' +
9398
who.discord.map(p => p.name.ru || p.name.en).join(', ');
9499

95-
result += '\n\nУсього гравців: ' + who.total + '.\n```';
100+
result += '\n\nУсього гравців: ' + who.total + '.';
96101
}
97102

98-
return result;
103+
return wrapInCodeBlock(result);
99104
}
100105

101106
async whois(playerName) {
@@ -112,25 +117,25 @@ class DreamLand {
112117
const clan = whoisData.clan ? whoisData.clan.name : 'Нет';
113118
const remorts = whoisData.remorts || '0';
114119
const title = whoisData.clan?.title
115-
? `*Титул у клані:* ${whoisData.clan.title}\n`
120+
? `Титул у клані: ${whoisData.clan.title}\n`
116121
: '';
117122
const capitalizedPlayerName =
118123
name.charAt(0).toUpperCase() + name.slice(1);
119124

120125
result =
121-
`*Інформація про гравця:*\n\n` +
122-
`*Ім'я:* ${capitalizedPlayerName}\n` +
123-
`*Раса:* ${race}\n` +
124-
`*Клан:* ${clan}\n` +
126+
`Інформація про гравця:\n\n` +
127+
`Ім'я: ${capitalizedPlayerName}\n` +
128+
`Раса: ${race}\n` +
129+
`Клан: ${clan}\n` +
125130
title +
126-
`*Кількість перероджень:* ${remorts}`;
131+
`Кількість перероджень: ${remorts}`;
127132
} else if (whoisData.error === 'player not found') {
128133
result = `Персонаж із таким ім'ям не знайдений`;
129134
} else {
130135
result = 'Сталася помилка, спробуйте пізніше.';
131136
}
132137

133-
return result;
138+
return wrapInCodeBlock(result);
134139
}
135140

136141
async ooc(args) {

telegram/utils.js

+20
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
const cleanMessage = text => {
2+
return text
3+
.replace(/<[^>]+>/g, '')
4+
.replace(/\[\/?(color|b|i|u|size)=?.*?\]/g, '')
5+
.replace(/(\r\n|\n|\r)/gm, '');
6+
};
7+
8+
const wrapInCodeBlock = text => {
9+
return `\`\`\`\n${text}\n\`\`\``;
10+
};
11+
12+
const escapeMarkdown = text => {
13+
return text.replace(/([_*[\]()~`>#+\-=|{}.!])/g, '\\$1');
14+
};
15+
16+
module.exports = {
17+
cleanMessage,
18+
wrapInCodeBlock,
19+
escapeMarkdown,
20+
};

0 commit comments

Comments
 (0)