Skip to content

Commit 4dbf5e8

Browse files
committed
Translate Chinese DMs before voice playback
1 parent 763b1a6 commit 4dbf5e8

File tree

9 files changed

+84
-2
lines changed

9 files changed

+84
-2
lines changed

src/discordEvents/directMessage.js

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,20 +18,31 @@
1818
1919
*/
2020
const DiscordVoice = require('../discordTools/discordVoice.js');
21+
const Translate = require('translate');
2122

2223
module.exports = {
2324
name: 'messageCreate',
2425
async execute(client, message) {
2526
if (message.guild) return;
2627
if (message.author.bot) return;
2728

29+
let speakText = message.cleanContent;
30+
if (/[\u3400-\u9FBF]/.test(message.cleanContent)) {
31+
try {
32+
speakText = await Translate(message.cleanContent, 'en');
33+
}
34+
catch (e) {
35+
client.log(client.intlGet(null, 'infoCap'), `Translation failed: ${e.message}`);
36+
}
37+
}
38+
2839
for (const [guildId, rustplus] of Object.entries(client.rustplusInstances)) {
2940
if (!rustplus || !rustplus.isOperational) continue;
3041

3142
const instance = client.getInstance(guildId);
3243
if (instance && instance.blacklist['discordIds'].includes(message.author.id)) continue;
3344

34-
await DiscordVoice.sendDiscordVoiceMessage(guildId, message.cleanContent);
45+
await DiscordVoice.sendDiscordVoiceMessage(guildId, speakText);
3546
}
3647

3748
client.log(client.intlGet(null, 'infoCap'), client.intlGet(null, 'logDiscordMessage', {

src/discordTools/SetupSettingsMenu.js

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -198,6 +198,23 @@ async function setupGeneralSettings(client, guildId, channel) {
198198
Path.join(__dirname, '..', 'resources/images/settings_logo.png'))]
199199
});
200200

201+
await client.messageSend(channel, {
202+
embeds: [DiscordEmbeds.getEmbed({
203+
color: Constants.COLOR_SETTINGS,
204+
title: client.intlGet(guildId, 'teamChatVoiceSetting'),
205+
thumbnail: `attachment://settings_logo.png`,
206+
fields: [{
207+
name: client.intlGet(guildId, 'steamId'),
208+
value: instance.generalSettings.teamChatVoiceSteamId ?
209+
instance.generalSettings.teamChatVoiceSteamId : client.intlGet(guildId, 'none'),
210+
inline: true
211+
}]
212+
})],
213+
components: [DiscordButtons.getTeamChatVoiceButton(guildId)],
214+
files: [new Discord.AttachmentBuilder(
215+
Path.join(__dirname, '..', 'resources/images/settings_logo.png'))]
216+
});
217+
201218
await client.messageSend(channel, {
202219
embeds: [DiscordEmbeds.getEmbed({
203220
color: Constants.COLOR_SETTINGS,

src/discordTools/discordButtons.js

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -385,6 +385,15 @@ module.exports = {
385385
}));
386386
},
387387

388+
getTeamChatVoiceButton: function (guildId) {
389+
return new Discord.ActionRowBuilder().addComponents(
390+
module.exports.getButton({
391+
customId: 'TeamChatVoice',
392+
label: Client.client.intlGet(guildId, 'editCap'),
393+
style: PRIMARY
394+
}));
395+
},
396+
388397
getLeaderCommandEnabledButton: function (guildId, enabled) {
389398
return new Discord.ActionRowBuilder().addComponents(
390399
module.exports.getButton({

src/discordTools/discordModals.js

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -322,6 +322,25 @@ module.exports = {
322322
return modal;
323323
},
324324

325+
getTeamChatVoiceModal(guildId) {
326+
const modal = module.exports.getModal({
327+
customId: 'TeamChatVoice',
328+
title: Client.client.intlGet(guildId, 'teamChatVoiceSetting')
329+
});
330+
331+
modal.addComponents(
332+
new Discord.ActionRowBuilder().addComponents(TextInput.getTextInput({
333+
customId: 'TeamChatVoiceSteamId',
334+
label: Client.client.intlGet(guildId, 'steamId'),
335+
value: '',
336+
style: Discord.TextInputStyle.Short,
337+
required: false
338+
}))
339+
);
340+
341+
return modal;
342+
},
343+
325344
getTrackerRemovePlayerModal(guildId, trackerId) {
326345
const instance = Client.client.getInstance(guildId);
327346
const tracker = instance.trackers[trackerId];

src/handlers/buttonHandler.js

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -253,6 +253,10 @@ module.exports = async (client, interaction) => {
253253
instance.generalSettings.smartSwitchNotifyInGameWhenChangedFromDiscord)]
254254
});
255255
}
256+
else if (interaction.customId === 'TeamChatVoice') {
257+
const modal = DiscordModals.getTeamChatVoiceModal(guildId);
258+
await interaction.showModal(modal);
259+
}
256260
else if (interaction.customId === 'LeaderCommandEnabled') {
257261
instance.generalSettings.leaderCommandEnabled = !instance.generalSettings.leaderCommandEnabled;
258262
client.setInstance(guildId, instance);

src/handlers/modalHandler.js

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@ const Scrape = require('../util/scrape.js');
2929
module.exports = async (client, interaction) => {
3030
const instance = client.getInstance(interaction.guildId);
3131
const guildId = interaction.guildId;
32+
const rustplus = client.rustplusInstances[guildId];
3233

3334
const verifyId = Math.floor(100000 + Math.random() * 900000);
3435
client.logInteraction(interaction, verifyId, 'userModal');
@@ -363,6 +364,19 @@ module.exports = async (client, interaction) => {
363364

364365
await DiscordMessages.sendTrackerMessage(interaction.guildId, ids.trackerId);
365366
}
367+
else if (interaction.customId === 'TeamChatVoice') {
368+
let steamId = interaction.fields.getTextInputValue('TeamChatVoiceSteamId').trim();
369+
if (steamId === '') {
370+
steamId = null;
371+
}
372+
instance.generalSettings.teamChatVoiceSteamId = steamId;
373+
client.setInstance(guildId, instance);
374+
if (rustplus) rustplus.generalSettings.teamChatVoiceSteamId = steamId;
375+
client.log(client.intlGet(null, 'infoCap'), client.intlGet(null, 'modalValueChange', {
376+
id: `${verifyId}`,
377+
value: `${steamId}`
378+
}));
379+
}
366380
else if (interaction.customId.startsWith('TrackerRemovePlayer')) {
367381
const ids = JSON.parse(interaction.customId.replace('TrackerRemovePlayer', ''));
368382
const tracker = instance.trackers[ids.trackerId];

src/handlers/teamChatHandler.js

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,13 @@
1919
*/
2020

2121
const DiscordMessages = require('../discordTools/discordMessages.js');
22+
const DiscordVoice = require('../discordTools/discordVoice.js');
2223

2324
module.exports = async function (rustplus, client, message) {
25+
const instance = client.getInstance(rustplus.guildId);
2426
await DiscordMessages.sendTeamChatMessage(rustplus.guildId, message);
27+
if (instance.generalSettings.teamChatVoiceSteamId &&
28+
instance.generalSettings.teamChatVoiceSteamId === message.steamId.toString()) {
29+
await DiscordVoice.sendDiscordVoiceMessage(rustplus.guildId, message.message);
30+
}
2531
}

src/languages/en.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -635,6 +635,7 @@
635635
"shouldSmartAlarmNotifyNotConnectedSetting": "Should Smart Alarms notify even if they are not setup on the connected rust server?",
636636
"shouldSmartAlarmsNotifyInGameSetting": "Should Smart Alarms notify In-Game?",
637637
"shouldSmartSwitchNotifyInGameWhenChangedFromDiscord": "Should Smart Switches and Smart Switch Groups notify In-Game when they are changed from discord?",
638+
"teamChatVoiceSetting": "Set team chat voice Steam ID:",
638639
"showingBlacklist": "Showing the blacklist.",
639640
"showingSubscriptionList": "Showing the subscription list.",
640641
"shredder": "Shredder",

src/templates/generalSettingsTemplate.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,5 +22,6 @@
2222
"battlemetricsTrackerNameChanges": true,
2323
"battlemetricsGlobalNameChanges": false,
2424
"battlemetricsGlobalLogin": false,
25-
"battlemetricsGlobalLogout": false
25+
"battlemetricsGlobalLogout": false,
26+
"teamChatVoiceSteamId": null
2627
}

0 commit comments

Comments
 (0)