Skip to content

Commit 27eb38b

Browse files
committed
Add first draft of using rustplus-ts to connect to servers
1 parent e1e2cf7 commit 27eb38b

File tree

18 files changed

+804
-63
lines changed

18 files changed

+804
-63
lines changed

index.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ import { LocaleManager, Languages, isValidLanguage } from './src/managers/Locale
2727
import { CredentialsManager } from './src/managers/credentialsManager';
2828
import { GuildInstanceManager } from './src/managers/guildInstanceManager';
2929
import { DiscordManager } from './src/managers/discordManager';
30-
//import { RustPlusMananger } from './src/managers/rustPlusManager';
30+
import { RustPlusManager } from './src/managers/rustPlusManager';
3131
import { FcmListenerManager } from './src/managers/fcmListenerManager';
3232

3333
dotenv.config();
@@ -97,10 +97,10 @@ export const guildInstanceManager = new GuildInstanceManager(
9797
path.join(__dirname, 'src', 'templates')
9898
);
9999

100+
export const rustPlusManager = new RustPlusManager();
100101
export const discordManager = new DiscordManager();
101102
discordManager.build();
102103

103-
//export const rustPlusManager = new RustPlusMananger();
104104
export const fcmListenerManager = new FcmListenerManager(discordManager);
105105

106106
process.on('unhandledRejection', error => {

src/discordEvents/guildDelete.ts

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,9 +20,16 @@
2020

2121
import * as discordjs from 'discord.js';
2222

23-
import { guildInstanceManager as gim, log, credentialsManager as cm, fcmListenerManager as flm } from '../../index';
23+
import {
24+
guildInstanceManager as gim,
25+
log,
26+
credentialsManager as cm,
27+
fcmListenerManager as flm,
28+
rustPlusManager as rpm
29+
} from '../../index';
2430
import { DiscordManager } from '../managers/discordManager';
2531
import { Credentials } from '../managers/credentialsManager';
32+
import { GuildInstance } from '../managers/guildInstanceManager';
2633

2734
export const name = 'guildDelete';
2835
export const once = false;
@@ -50,7 +57,10 @@ export async function execute(dm: DiscordManager, guild: discordjs.Guild) {
5057
cm.updateCredentials(steamId);
5158
}
5259

53-
// TODO! turn off and remove rustplus instance from manager for guild
60+
const gInstance = gim.getGuildInstance(guild.id) as GuildInstance;
61+
for (const serverId of Object.keys(gInstance.serverInfoMap)) {
62+
rpm.removeInstance(guild.id, serverId);
63+
}
5464

5565
/* Delete guild instance file last. */
5666
gim.deleteGuildInstance(guild.id);

src/discordEvents/ready.ts

Lines changed: 22 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -20,10 +20,18 @@
2020

2121
import * as path from 'path';
2222

23-
import { guildInstanceManager as gim, config, log, credentialsManager as cm, fcmListenerManager as flm } from '../../index';
23+
import {
24+
guildInstanceManager as gim,
25+
config,
26+
log,
27+
credentialsManager as cm,
28+
fcmListenerManager as flm,
29+
rustPlusManager as rpm
30+
} from '../../index';
2431
import { DiscordManager } from '../managers/discordManager';
2532
import { Credentials } from '../managers/credentialsManager';
2633
import * as types from '../utils/types';
34+
import { GuildInstance } from '../managers/guildInstanceManager';
2735

2836
export const name = 'ready';
2937
export const once = true;
@@ -100,11 +108,19 @@ export async function execute(dm: DiscordManager) {
100108
for (const guild of dm.client.guilds.cache.values()) {
101109
await dm.registerGuildSlashCommands(guild);
102110
await dm.setupGuild(guild);
103-
}
104-
105111

106-
// TODO!
107-
// Setup rustplus instances based on guild settings
108-
// global variable uptimeBot set new time.
112+
const gInstance = gim.getGuildInstance(guild.id) as GuildInstance;
113+
for (const [serverId, content] of Object.entries(gInstance.serverInfoMap)) {
114+
if (content.active) {
115+
if (rpm.addInstance(guild.id, serverId, content.mainSteamId)) {
116+
const rustPlusInstance = rpm.getInstance(guild.id, serverId);
117+
if (rustPlusInstance) {
118+
await rustPlusInstance.startup();
119+
}
120+
}
121+
}
122+
}
123+
}
109124

125+
// TODO! global variable uptimeBot set new time.
110126
}

src/discordUtils/discordButtons.ts

Lines changed: 19 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@
2020

2121
import * as discordjs from 'discord.js';
2222

23+
import { ConnectionStatus } from '../managers/rustPlusManager';
2324
import * as types from '../utils/types';
2425
import * as constants from '../utils/constants';
2526
import { guildInstanceManager as gim, localeManager as lm } from '../../index';
@@ -153,23 +154,33 @@ export function getHelpButtons(): discordjs.ActionRowBuilder<discordjs.ButtonBui
153154
* Guild based buttons
154155
*/
155156

156-
export function getServerButtons(guildId: types.GuildId, serverId: types.ServerId, connection: ButtonConnectionTypes):
157+
export function getServerButtons(guildId: types.GuildId, serverId: types.ServerId,
158+
connectionStatus: ConnectionStatus):
157159
discordjs.ActionRowBuilder<discordjs.ButtonBuilder>[] {
158160
const gInstance = gim.getGuildInstance(guildId) as GuildInstance;
159161
const serverInfo = gInstance.serverInfoMap[serverId] as ServerInfo;
160162
const language = gInstance.generalSettings.language;
161163
const identifier = JSON.stringify({ 'serverId': serverId });
162164

163165
const connectionMap = {
164-
[ButtonConnectionTypes.Connected]: ['ServerDisconnect', 'buttonDisconnect', discordjs.ButtonStyle.Danger],
165-
[ButtonConnectionTypes.Disconnected]: ['ServerConnect', 'buttonConnect', discordjs.ButtonStyle.Primary],
166-
[ButtonConnectionTypes.Reconnecting]: ['ServerReconnecting', 'buttonReconnecting', discordjs.ButtonStyle.Danger]
166+
[ConnectionStatus.Disconnected]: ['ServerConnect', 'buttonConnect', discordjs.ButtonStyle.Primary],
167+
[ConnectionStatus.Connecting]: ['ServerConnecting', 'buttonConnecting', discordjs.ButtonStyle.Primary],
168+
[ConnectionStatus.Connected]: ['ServerDisconnect', 'buttonDisconnect', discordjs.ButtonStyle.Danger],
169+
[ConnectionStatus.Reconnecting]: ['ServerReconnecting', 'buttonReconnecting', discordjs.ButtonStyle.Danger]
167170
}
168171

169172
const connectionButton = getButton({
170-
customId: `${connectionMap[connection][0] as string}${identifier}`,
171-
label: lm.getIntl(language, connectionMap[connection][1] as string),
172-
style: connectionMap[connection][2] as discordjs.ButtonStyle.Danger | discordjs.ButtonStyle.Primary,
173+
customId: `${connectionMap[connectionStatus][0] as string}${identifier}`,
174+
label: lm.getIntl(language, connectionMap[connectionStatus][1] as string),
175+
style: connectionMap[connectionStatus][2] as discordjs.ButtonStyle.Danger | discordjs.ButtonStyle.Primary,
176+
type: discordjs.ComponentType.Button
177+
});
178+
179+
const isServerView = gInstance.serverToView === serverId;
180+
const viewButton = getButton({
181+
customId: `ServerView${identifier}`,
182+
label: lm.getIntl(language, 'buttonView'),
183+
style: isServerView ? discordjs.ButtonStyle.Success : discordjs.ButtonStyle.Danger,
173184
type: discordjs.ComponentType.Button
174185
});
175186

@@ -196,7 +207,7 @@ export function getServerButtons(guildId: types.GuildId, serverId: types.ServerI
196207

197208
return [
198209
new discordjs.ActionRowBuilder<discordjs.ButtonBuilder>().addComponents(
199-
connectionButton, editButton, websiteButton, deleteButton
210+
connectionButton, viewButton, editButton, websiteButton, deleteButton
200211
)
201212
];
202213
}

src/discordUtils/discordMessages.ts

Lines changed: 11 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ import * as discordjs from 'discord.js';
2222
import * as path from 'path';
2323

2424
import { log, guildInstanceManager as gim, credentialsManager as cm, localeManager as lm } from '../../index';
25+
import { ConnectionStatus } from '../managers/rustPlusManager';
2526
import * as constants from '../utils/constants';
2627
import * as discordButtons from './discordButtons';
2728
import * as discordEmbeds from './discordEmbeds';
@@ -154,7 +155,7 @@ export async function sendCredentialsListMessage(dm: DiscordManager, interaction
154155
*/
155156

156157
export async function sendServerMessage(dm: DiscordManager, guildId: types.GuildId, serverId: types.ServerId,
157-
interaction: discordjs.Interaction | null = null) {
158+
connectionStatus: ConnectionStatus, interaction: discordjs.Interaction | null = null) {
158159
const funcName = `[sendServerMessage]`;
159160
const logParam = { guildId: guildId, serverId: serverId };
160161
const gInstance = gim.getGuildInstance(guildId);
@@ -170,18 +171,16 @@ export async function sendServerMessage(dm: DiscordManager, guildId: types.Guild
170171
return;
171172
}
172173

173-
// TODO! Figure out what connection should be, based on rustplusManager and GuildInstance activeServerId
174-
const connection = discordButtons.ButtonConnectionTypes.Disconnected;
175-
176174
const content = {
177175
embeds: [discordEmbeds.getServerEmbed(guildId, serverId)],
178-
components: discordButtons.getServerButtons(guildId, serverId, connection)
176+
components: discordButtons.getServerButtons(guildId, serverId, connectionStatus)
179177
};
180178

181179
const message = await dm.sendUpdateMessage(guildId, content, gInstance.guildChannelIds.servers, serverInfo.
182180
messageId, interaction);
183181

184-
if (interaction === null && message instanceof discordjs.Message) {
182+
if (interaction === null && message instanceof discordjs.Message &&
183+
gInstance.serverInfoMap[serverId].messageId !== message.id) {
185184
gInstance.serverInfoMap[serverId].messageId = message.id;
186185
gim.updateGuildInstance(guildId);
187186
}
@@ -229,7 +228,8 @@ export async function sendSmartSwitchMessage(dm: DiscordManager, guildId: types.
229228
const message = await dm.sendUpdateMessage(guildId, content, gInstance.guildChannelIds.smartSwitches,
230229
smartSwitch.messageId, interaction);
231230

232-
if (interaction === null && message instanceof discordjs.Message) {
231+
if (interaction === null && message instanceof discordjs.Message &&
232+
smartSwitch.messageId !== message.id) {
233233
smartSwitch.messageId = message.id;
234234
gim.updateGuildInstance(guildId);
235235
}
@@ -275,7 +275,8 @@ export async function sendSmartAlarmMessage(dm: DiscordManager, guildId: types.G
275275
const message = await dm.sendUpdateMessage(guildId, content, gInstance.guildChannelIds.smartAlarms,
276276
smartAlarm.messageId, interaction);
277277

278-
if (interaction === null && message instanceof discordjs.Message) {
278+
if (interaction === null && message instanceof discordjs.Message &&
279+
smartAlarm.messageId !== message.id) {
279280
smartAlarm.messageId = message.id;
280281
gim.updateGuildInstance(guildId);
281282
}
@@ -318,7 +319,8 @@ export async function sendStorageMonitorMessage(dm: DiscordManager, guildId: typ
318319
const message = await dm.sendUpdateMessage(guildId, content, gInstance.guildChannelIds.storageMonitors,
319320
storageMonitor.messageId, interaction);
320321

321-
if (interaction === null && message instanceof discordjs.Message) {
322+
if (interaction === null && message instanceof discordjs.Message &&
323+
storageMonitor.messageId !== message.id) {
322324
storageMonitor.messageId = message.id;
323325
gim.updateGuildInstance(guildId);
324326
}

0 commit comments

Comments
 (0)