Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -36,3 +36,6 @@ yarn-error.log*
next-env.d.ts
/dist-server
fly.toml
*config.ts
*server.ts
*tsconfig.json
2 changes: 1 addition & 1 deletion config.ts
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ const config = {
NEXT_PUBLIC_DISCORD_CLIENT_ID:
process.env.NEXT_PUBLIC_DISCORD_CLIENT_ID || "",
DISCORD_BOT_TOKEN: process.env.DISCORD_BOT_TOKEN || "",
BASE_URL: process.env.BASE_URL || "http://localhost:8080",
BASE_URL: process.env.BASE_URL || "https://starky-discord-app.fly.dev",
DB_HOST,
DB_PORT,
DB_USERNAME,
Expand Down
70 changes: 52 additions & 18 deletions cron.ts
Original file line number Diff line number Diff line change
Expand Up @@ -41,6 +41,7 @@ export const refreshDiscordServer = async (discordServer: DiscordServer) => {

for (let discordMember of discordMembers) {
let deleteDiscordMember = !!discordMember.deletedAt;
let hasAtLeastOneRole = new Map();
for (let discordConfig of discordConfigs) {
const starkyModule = modules[discordConfig.starkyModuleType];
if (!starkyModule) {
Expand All @@ -50,7 +51,25 @@ export const refreshDiscordServer = async (discordServer: DiscordServer) => {
continue;
}
try {
await refreshDiscordMember(discordConfig, discordMember, starkyModule);
let hasRole = await refreshDiscordMember(
discordConfig,
discordMember,
starkyModule
);
if (!hasAtLeastOneRole.get(discordConfig.discordRoleId)) {
hasAtLeastOneRole.set(discordConfig.discordRoleId, {
server: discordConfig.discordServerId,
hasRole: [hasRole],
});
} else {
hasAtLeastOneRole.set(discordConfig.discordRoleId, {
...hasAtLeastOneRole.get(discordConfig.discordRoleId),
hasRole: [
...hasAtLeastOneRole.get(discordConfig.discordRoleId).hasRole,
hasRole,
],
});
}
} catch (e: any) {
if (e?.code === 10007) {
// This user is no longer a member of this discord server, we should just remove it
Expand All @@ -64,9 +83,38 @@ export const refreshDiscordServer = async (discordServer: DiscordServer) => {
);
}
}
if (deleteDiscordMember) {
try {
await DiscordMemberRepository.remove(discordMember);
} catch (e) {
console.error(
`Could not delete discord member ${discordMember.discordMemberId} in server ${discordConfig.discordServerId} ${e}`
);
}
}
}
if (deleteDiscordMember) {
await DiscordMemberRepository.remove(discordMember);

//@ts-ignore
// for each role and value of the map

for (let [role, value] of Array.from(hasAtLeastOneRole.entries())) {
let hasOneRoleArray = value.hasRole.filter(Boolean);

if (0 === hasOneRoleArray.length) {
await removeRole(
restDiscordClient,
value.server,
discordMember.discordMemberId,
role
);
continue;
}
await addRole(
restDiscordClient,
value.server,
discordMember.discordMemberId,
role
);
}
}
};
Expand All @@ -91,21 +139,7 @@ export const refreshDiscordMember = async (
: "goerli",
discordServerConfig?.starkyModuleConfig
);
if (shouldHaveRole) {
await addRole(
restDiscordClient,
discordServerConfig.discordServerId,
discordMember.discordMemberId,
discordServerConfig.discordRoleId
);
} else {
await removeRole(
restDiscordClient,
discordServerConfig.discordServerId,
discordMember.discordMemberId,
discordServerConfig.discordRoleId
);
}
return shouldHaveRole;
};

const cronInterval = async () => {
Expand Down
28 changes: 12 additions & 16 deletions discord/interactions/addConfigCommand.ts
Original file line number Diff line number Diff line change
Expand Up @@ -67,16 +67,26 @@ export const handleInitialConfigCommand = async (
return;
}

// slice only first 25 roles
const row = new ActionRowBuilder<SelectMenuBuilder>().addComponents(
new SelectMenuBuilder()
.setCustomId("starky-config-role")
.setPlaceholder("Role to assign")
.addOptions(...options)
.addOptions(...options.slice(0, 25))
);

// slice only next 25 roles
const row2 = new ActionRowBuilder<SelectMenuBuilder>().addComponents(
new SelectMenuBuilder()
.setCustomId("starky-config-role")
.setPlaceholder("Role to assign")
.addOptions(...options.slice(10, 35))
);

await interaction.reply({
content:
"What role do you want to assign to people matching your criteria?",
components: [row],
components: [row2],
ephemeral: true,
});
};
Expand All @@ -102,20 +112,6 @@ export const handleRoleConfigCommand = async (
return;
}

const alreadyDiscordServerConfigForRole =
await DiscordServerConfigRepository.findOneBy({
discordServerId: interaction.guildId,
discordRoleId: selectedRole.id,
});

if (alreadyDiscordServerConfigForRole) {
await interaction.update({
content: `❌ You already have setup a Starky configuration for the selected role. If you want to setup a new configuration for this role, please first delete the existing one with \`/starky-delete-config\``,
components: [],
});
return;
}

ongoingConfigurationsCache[interaction.guildId].roleId =
interaction.values[0];
await interaction.update({
Expand Down
1 change: 1 addition & 0 deletions package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

3 changes: 2 additions & 1 deletion server.ts
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,8 @@ import { launchBot } from "./discord";
const dev = process.env.NODE_ENV !== "production";
const app = next({ dev, hostname: config.HOST, port: config.PORT });
const handle = app.getRequestHandler();

// console.log(process.env);
// process.exit(1);
const launchServer = async () => {
// Setup the database
await setupDb();
Expand Down
2 changes: 1 addition & 1 deletion tsconfig.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"compilerOptions": {
"target": "es5",
"target": "es6",
"lib": ["dom", "dom.iterable", "esnext"],
"allowJs": true,
"skipLibCheck": true,
Expand Down
Loading