Skip to content

Commit 29aaad4

Browse files
committed
chore: format
1 parent 346f0f5 commit 29aaad4

20 files changed

+746
-448
lines changed

.github/workflows/deploy.yml

Lines changed: 47 additions & 47 deletions
Original file line numberDiff line numberDiff line change
@@ -2,56 +2,56 @@ name: Deploy the bot
22

33
on:
44
push:
5-
branches: [ main ]
5+
branches: [main]
66
workflow_dispatch:
77

88
jobs:
99
deploy:
1010
runs-on: ubuntu-latest
11-
11+
1212
steps:
13-
- uses: actions/checkout@v4
14-
15-
- name: Setup Node.js
16-
uses: actions/setup-node@v4
17-
with:
18-
node-version: '20'
19-
cache: 'npm'
20-
21-
- name: Install dependencies
22-
run: npm ci
23-
24-
- name: Build project
25-
run: npm run build
26-
27-
- name: Copy package.json and package-lock.json
28-
uses: appleboy/scp-action@v1.0.0
29-
with:
30-
host: ${{ secrets.HOST }}
31-
username: ${{ secrets.USER }}
32-
key: ${{ secrets.KEY }}
33-
port: ${{ secrets.PORT }}
34-
source: "package*.json"
35-
target: "${{ secrets.DEPLOY_PATH }}/"
36-
37-
- name: Copy built files
38-
uses: appleboy/scp-action@v1.0.0
39-
with:
40-
host: ${{ secrets.HOST }}
41-
username: ${{ secrets.USER }}
42-
key: ${{ secrets.KEY }}
43-
port: ${{ secrets.PORT }}
44-
source: "./dist/*"
45-
target: "${{ secrets.DEPLOY_PATH }}/dist/"
46-
strip_components: 1
47-
48-
- name: Install dependencies
49-
uses: appleboy/ssh-action@v1.2.2
50-
with:
51-
host: ${{ secrets.HOST }}
52-
username: ${{ secrets.USER }}
53-
key: ${{ secrets.KEY }}
54-
port: ${{ secrets.PORT }}
55-
script: |
56-
cd ${{ secrets.DEPLOY_PATH }}
57-
npm ci --production
13+
- uses: actions/checkout@v4
14+
15+
- name: Setup Node.js
16+
uses: actions/setup-node@v4
17+
with:
18+
node-version: "20"
19+
cache: "npm"
20+
21+
- name: Install dependencies
22+
run: npm ci
23+
24+
- name: Build project
25+
run: npm run build
26+
27+
- name: Copy package.json and package-lock.json
28+
uses: appleboy/scp-action@v1.0.0
29+
with:
30+
host: ${{ secrets.HOST }}
31+
username: ${{ secrets.USER }}
32+
key: ${{ secrets.KEY }}
33+
port: ${{ secrets.PORT }}
34+
source: "package*.json"
35+
target: "${{ secrets.DEPLOY_PATH }}/"
36+
37+
- name: Copy built files
38+
uses: appleboy/scp-action@v1.0.0
39+
with:
40+
host: ${{ secrets.HOST }}
41+
username: ${{ secrets.USER }}
42+
key: ${{ secrets.KEY }}
43+
port: ${{ secrets.PORT }}
44+
source: "./dist/*"
45+
target: "${{ secrets.DEPLOY_PATH }}/dist/"
46+
strip_components: 1
47+
48+
- name: Install dependencies
49+
uses: appleboy/ssh-action@v1.2.2
50+
with:
51+
host: ${{ secrets.HOST }}
52+
username: ${{ secrets.USER }}
53+
key: ${{ secrets.KEY }}
54+
port: ${{ secrets.PORT }}
55+
script: |
56+
cd ${{ secrets.DEPLOY_PATH }}
57+
npm ci --production

README.md

Lines changed: 15 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,19 @@
11
# ALTERSHAPER Bot - ALTER EGO Wiki Moderation Bot
2+
23
A lawful angel Discord moderator—speaks in CAPS with pseudo-biblical English.
34

45
Extensive documentation will be found here: https://alter-ego.fandom.com/wiki/Help:ALTERSHAPER
56

67
## Features
8+
79
- **Moderation**: `/kick`, `/ban`, `/timeout`, `/warn`
810
- **Management**: `/clear` with message archiving, `/removesin` for punishment reversal
911
- **Information**: `/sins` for records, `/archives` for deleted messages, `/help` for well, help lol
1012
- **Auto-welcome** new members
1113
- **Action IDs** for moderation & management commands (e.g. W1, K1, B1, T1, C1)
1214

1315
## Setup
16+
1417
1. `npm install`
1518
2. Create `.env` with `DISCORD_TOKEN=your_token`
1619
3. `npm run build`
@@ -19,21 +22,22 @@ Extensive documentation will be found here: https://alter-ego.fandom.com/wiki/He
1922
Use `npm run dev` if you want to skip the compiling.
2023

2124
## Required Permissions
25+
2226
You can give the bot its permissions by one of these options:
23-
| Role Permissions (In-server) | Bot Permissions (Dev Portal) |
27+
| Role Permissions (In-server) | Bot Permissions (Dev Portal) |
2428
| -------------------------------- | --------------------------------------- |
25-
| Kick, Approve and Reject Members | Kick Members |
26-
| Ban Members | Ban Members |
27-
| Time out members | Moderate Members |
28-
| Manage Messages | Manage Messages |
29-
| Send Messages | Send Messages |
30-
| Embed Links | Embed Links |
31-
| Read Message History | Read Message History |
32-
| Add Reactions | Add Reactions |
33-
| View Channels | View Channels |
34-
29+
| Kick, Approve and Reject Members | Kick Members |
30+
| Ban Members | Ban Members |
31+
| Time out members | Moderate Members |
32+
| Manage Messages | Manage Messages |
33+
| Send Messages | Send Messages |
34+
| Embed Links | Embed Links |
35+
| Read Message History | Read Message History |
36+
| Add Reactions | Add Reactions |
37+
| View Channels | View Channels |
3538

3639
Maybe more that I forgot about xd—but to be honest, if you're selfhosting then you're better off just turning everything on
3740

3841
## Invite
42+
3943
See the OAUTH2 section in your bot settings on the Discord Developer Portal.

src/commands/archives.ts

Lines changed: 54 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,10 @@ function createEmbed(
3939
return embed;
4040
}
4141

42-
function createButtons(currentPage: number, totalPages: number): ActionRowBuilder<ButtonBuilder> {
42+
function createButtons(
43+
currentPage: number,
44+
totalPages: number,
45+
): ActionRowBuilder<ButtonBuilder> {
4346
return new ActionRowBuilder<ButtonBuilder>().addComponents(
4447
new ButtonBuilder()
4548
.setCustomId("first")
@@ -102,7 +105,6 @@ function addMessagesToEmbed(embed: EmbedBuilder, messages: any[]): void {
102105
export async function execute(
103106
interaction: ChatInputCommandInteraction,
104107
): Promise<void> {
105-
106108
if (!interaction.guild) {
107109
await interaction.reply({
108110
content: "**THIS HOLY COMMAND CAN ONLY BE USED IN THE SACRED HALLS!**",
@@ -147,11 +149,19 @@ export async function execute(
147149
const totalPages = Math.ceil(purgedMessages.length / messagesPerPage);
148150
let currentPage = 0;
149151

150-
const embed = createEmbed(purgedMessages, currentPage, totalPages, actionId);
152+
const embed = createEmbed(
153+
purgedMessages,
154+
currentPage,
155+
totalPages,
156+
actionId,
157+
);
151158
const startIndex = currentPage * messagesPerPage;
152-
const endIndex = Math.min(startIndex + messagesPerPage, purgedMessages.length);
159+
const endIndex = Math.min(
160+
startIndex + messagesPerPage,
161+
purgedMessages.length,
162+
);
153163
const pageMessages = purgedMessages.slice(startIndex, endIndex);
154-
164+
155165
addMessagesToEmbed(embed, pageMessages);
156166

157167
const buttons = createButtons(currentPage, totalPages);
@@ -192,11 +202,22 @@ export async function execute(
192202
break;
193203
}
194204

195-
const newEmbed = createEmbed(purgedMessages, currentPage, totalPages, actionId);
205+
const newEmbed = createEmbed(
206+
purgedMessages,
207+
currentPage,
208+
totalPages,
209+
actionId,
210+
);
196211
const newStartIndex = currentPage * messagesPerPage;
197-
const newEndIndex = Math.min(newStartIndex + messagesPerPage, purgedMessages.length);
198-
const newPageMessages = purgedMessages.slice(newStartIndex, newEndIndex);
199-
212+
const newEndIndex = Math.min(
213+
newStartIndex + messagesPerPage,
214+
purgedMessages.length,
215+
);
216+
const newPageMessages = purgedMessages.slice(
217+
newStartIndex,
218+
newEndIndex,
219+
);
220+
200221
addMessagesToEmbed(newEmbed, newPageMessages);
201222

202223
const newButtons = createButtons(currentPage, totalPages);
@@ -208,28 +229,29 @@ export async function execute(
208229
});
209230

210231
collector.on("end", async () => {
211-
const disabledButtons = new ActionRowBuilder<ButtonBuilder>().addComponents(
212-
new ButtonBuilder()
213-
.setCustomId("first")
214-
.setLabel("⏮️ First")
215-
.setStyle(ButtonStyle.Secondary)
216-
.setDisabled(true),
217-
new ButtonBuilder()
218-
.setCustomId("previous")
219-
.setLabel("◀️ Previous")
220-
.setStyle(ButtonStyle.Secondary)
221-
.setDisabled(true),
222-
new ButtonBuilder()
223-
.setCustomId("next")
224-
.setLabel("Next ▶️")
225-
.setStyle(ButtonStyle.Secondary)
226-
.setDisabled(true),
227-
new ButtonBuilder()
228-
.setCustomId("last")
229-
.setLabel("Last ⏭️")
230-
.setStyle(ButtonStyle.Secondary)
231-
.setDisabled(true),
232-
);
232+
const disabledButtons =
233+
new ActionRowBuilder<ButtonBuilder>().addComponents(
234+
new ButtonBuilder()
235+
.setCustomId("first")
236+
.setLabel("⏮️ First")
237+
.setStyle(ButtonStyle.Secondary)
238+
.setDisabled(true),
239+
new ButtonBuilder()
240+
.setCustomId("previous")
241+
.setLabel("◀️ Previous")
242+
.setStyle(ButtonStyle.Secondary)
243+
.setDisabled(true),
244+
new ButtonBuilder()
245+
.setCustomId("next")
246+
.setLabel("Next ▶️")
247+
.setStyle(ButtonStyle.Secondary)
248+
.setDisabled(true),
249+
new ButtonBuilder()
250+
.setCustomId("last")
251+
.setLabel("Last ⏭️")
252+
.setStyle(ButtonStyle.Secondary)
253+
.setDisabled(true),
254+
);
233255

234256
response.edit({ components: [disabledButtons] }).catch(() => {});
235257
});
@@ -241,4 +263,4 @@ export async function execute(
241263
flags: MessageFlags.Ephemeral,
242264
});
243265
}
244-
}
266+
}

src/commands/avatar.ts

Lines changed: 17 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -23,10 +23,10 @@ export async function execute(
2323

2424
try {
2525
const targetUser: User = await rawTargetUser.fetch(true);
26-
const isAnimatedAvatar = targetUser.avatar?.startsWith('a_');
27-
const avatarURL = targetUser.displayAvatarURL({
28-
size: 512,
29-
extension: isAnimatedAvatar ? "gif" : "png"
26+
const isAnimatedAvatar = targetUser.avatar?.startsWith("a_");
27+
const avatarURL = targetUser.displayAvatarURL({
28+
size: 512,
29+
extension: isAnimatedAvatar ? "gif" : "png",
3030
});
3131
const bannerURL = targetUser.bannerURL({ size: 1024, extension: "png" });
3232

@@ -37,17 +37,26 @@ export async function execute(
3737
.setImage(avatarURL);
3838

3939
if (bannerURL) {
40-
embed.addFields({ name: "Banner", value: `[View Banner](${bannerURL})`, inline: false });
40+
embed.addFields({
41+
name: "Banner",
42+
value: `[View Banner](${bannerURL})`,
43+
inline: false,
44+
});
4145
} else if (targetUser.hexAccentColor) {
42-
embed.addFields({ name: "Banner Color", value: `Hex: ${targetUser.hexAccentColor}`, inline: false });
46+
embed.addFields({
47+
name: "Banner Color",
48+
value: `Hex: ${targetUser.hexAccentColor}`,
49+
inline: false,
50+
});
4351
}
4452

4553
await interaction.reply({ embeds: [embed] });
4654
} catch (error) {
4755
console.error("Error displaying avatar/banner:", error);
4856
await interaction.reply({
49-
content: "**Failed to retrieve user's visage! The soul may be elusive or one's divine profile hidden.**",
57+
content:
58+
"**Failed to retrieve user's visage! The soul may be elusive or one's divine profile hidden.**",
5059
flags: MessageFlags.Ephemeral,
5160
});
5261
}
53-
}
62+
}

src/commands/ban.ts

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,6 @@ export async function execute(
2727
interaction: ChatInputCommandInteraction,
2828
executor: GuildMember,
2929
): Promise<void> {
30-
3130
const targetUser = interaction.options.getUser("user")!;
3231
const reason =
3332
interaction.options.getString("reason") ||

0 commit comments

Comments
 (0)