Skip to content

Commit

Permalink
Promise.allの記法を修正
Browse files Browse the repository at this point in the history
  • Loading branch information
minarin0179 committed Aug 10, 2023
1 parent 001733c commit acf00d1
Show file tree
Hide file tree
Showing 12 changed files with 64 additions and 79 deletions.
8 changes: 2 additions & 6 deletions src/commands/slashcommands/cleanup.ts
Original file line number Diff line number Diff line change
Expand Up @@ -39,11 +39,7 @@ export default new SlashCommand({
const channels = targetChannel.children.cache.filter(
(channel): channel is NewsChannel | TextChannel | VoiceChannel => channel.isTextBased()
);
await Promise.all(
channels.map(async channel => {
await deleteAllMessages(channel);
})
);
await Promise.all(channels.map(channel => deleteAllMessages(channel)));
}

await reply(interaction, `「${targetChannel.name}」内のメッセージを削除しました`);
Expand All @@ -52,5 +48,5 @@ export default new SlashCommand({

const deleteAllMessages = async (channel: GuildTextBasedChannel) => {
const messages = await fetchAllMessages(channel);
return await deleteMultiMessages(channel, messages);
return deleteMultiMessages(channel, messages);
};
14 changes: 7 additions & 7 deletions src/commands/slashcommands/copy.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import { ChannelType, GuildChannel, SlashCommandBuilder } from "discord.js";
import { ChannelType, GuildChannel, SlashCommandBuilder, GuildTextBasedChannel } from "discord.js";
import { SlashCommand } from "../../structures/SlashCommand";
import { isCategory } from "../../utils/isCategory";
import { reply } from "../../utils/Reply";
Expand Down Expand Up @@ -27,12 +27,12 @@ export default new SlashCommand({
const channelLinks = await duplicateChannel(originalChannel);

await Promise.all(
channelLinks.map(async link => {
const { before, after } = link;
if (before.isTextBased() && after.isTextBased()) {
await transferAllMessages(before, after, { allowedMentions: { parse: [] }, updates: channelLinks });
}
})
channelLinks.map(async ({ before, after }) =>
transferAllMessages(before, after, {
allowedMentions: { parse: [] },
updates: channelLinks,
})
)
);

await reply(interaction, `「${originalChannel.name}」のコピーが完了しました`);
Expand Down
46 changes: 24 additions & 22 deletions src/commands/slashcommands/delete.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
import { ChannelType, SlashCommandBuilder, CategoryChannel, OverwriteType } from "discord.js";
import { SlashCommand } from "../../structures/SlashCommand";
import { reply } from "../../utils/Reply";
import role from "./role";

export default new SlashCommand({
data: new SlashCommandBuilder()
Expand All @@ -26,34 +27,35 @@ export default new SlashCommand({
execute: async ({ interaction, args }) => {
await interaction.deferReply({ ephemeral: true });

const category = args.getChannel("削除するカテゴリ", true) as CategoryChannel;
const category = args.getChannel<ChannelType.GuildCategory>("削除するカテゴリ", true);
const deleteRoleIds = new Set<string>();
const children = category.children.cache;

await Promise.all(
category.children.cache.map(async ch => {
ch.permissionOverwrites.cache
.filter(perm => perm.type == OverwriteType.Role)
.map(perm => deleteRoleIds.add(perm.id));

await ch.delete();
})
);
children.map(async ch => {
ch.permissionOverwrites.cache
.filter(perm => perm.type == OverwriteType.Role)
.map(perm => deleteRoleIds.add(perm.id));
});

await Promise.all(children.map(async ch => await ch.delete()));
await category.delete();

if (args.getString("ロールの削除") == "true") {
await Promise.all(
[...deleteRoleIds].map(async id => {
const role = await interaction.guild?.roles.fetch(id);
if (role == interaction.guild?.roles.everyone) return;
else if (role?.editable) await role.delete();
else
await reply(
interaction,
`「${role}」はマダミナリンクより上位の役職のため削除できませんでした`
).catch(() => {});
})
);
const everyone = interaction.guild?.roles.everyone.id;
deleteRoleIds.delete(everyone!);
const roles = (await interaction.guild?.roles.fetch())?.filter(role => deleteRoleIds.has(role.id));
if (roles) {
const [deletable, undeletable] = roles.partition(role => role.editable);

await Promise.all(deletable.map(async role => role.delete()));
if (undeletable.size > 0) {
await reply(
interaction,
`マダミナリンクより上位のロールは削除できません
削除に失敗したロール : ${undeletable.map(role => role.toString()).join(", ")}`
);
}
}
}

//コマンドを入力したチャンネルが削除されている場合がある
Expand Down
4 changes: 2 additions & 2 deletions src/commands/slashcommands/open.ts
Original file line number Diff line number Diff line change
Expand Up @@ -25,11 +25,11 @@ export default new SlashCommand({

if (!channel) return reply(interaction, "チャンネルが見つかりませんでした");

if (!("permissionOverwrites" in channel)) return reply(interaction, "権限を編集できません");
if (!("permissionOverwrites" in channel)) return reply(interaction, "このチャンネルは権限を編集できません");

if (!("id" in mentionable)) return; //getMentionableのバグが直ったら削除

await channel?.permissionOverwrites.edit(mentionable.id, { ViewChannel: false });
await channel.permissionOverwrites.edit(mentionable.id, { ViewChannel: false });

await interaction.channel?.send(openMessage(channel, mentionable));

Expand Down
6 changes: 2 additions & 4 deletions src/commands/slashcommands/rename.ts
Original file line number Diff line number Diff line change
Expand Up @@ -30,9 +30,7 @@ export default new SlashCommand({
const failed: string[] = [];

await Promise.all(
role.members.map(async member => {
await rename(member, prefix).catch(() => failed.push(`${member}`));
})
role.members.map(async member => rename(member, prefix).catch(() => failed.push(`${member}`)))
);

await reply(interaction, "ニックネームのリセットが完了しました");
Expand All @@ -48,5 +46,5 @@ export const rename = async (member: GuildMember, prefix?: string | null) => {
//@より後ろの名前
const name = nickname?.substring(nickname.lastIndexOf("@") + 1) || member.user.globalName;

return await member.setNickname(!prefix ? name : `${prefix}@${name}`);
return member.setNickname(!prefix ? name : `${prefix}@${name}`);
};
6 changes: 1 addition & 5 deletions src/commands/slashcommands/sync.ts
Original file line number Diff line number Diff line change
Expand Up @@ -21,11 +21,7 @@ export default new SlashCommand({

const category = args.getChannel("同期するカテゴリ", true) as CategoryChannel;

await Promise.all(
category.children.cache.map(async ch => {
await ch.lockPermissions();
})
);
await Promise.all(category.children.cache.map(async ch => ch.lockPermissions()));

await reply(interaction, `「${category.name}」内のチャンネルの権限を同期しました`);
},
Expand Down
13 changes: 6 additions & 7 deletions src/commands/slashcommands/transfer.ts
Original file line number Diff line number Diff line change
Expand Up @@ -47,14 +47,13 @@ export default new SlashCommand({
content: "転送先のチャンネルを選択してください",
components: transferList.build([...discordSort(channels).values()]),
});
return;
}

await reply(interaction, `「${destination}」に転送するメッセージと同じリアクションを付けてください`);
} else {
await reply(interaction, `「${destination}」に転送するメッセージと同じリアクションを付けてください`);

await interaction.channel?.send({
components: buttonToRow(transferButton.build({ destination })),
});
await interaction.channel?.send({
components: buttonToRow(transferButton.build({ destination })),
});
}
},
});

Expand Down
2 changes: 1 addition & 1 deletion src/components/buttons/roleAdd.ts
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ export default new Button({
const { members } = target;
if (members.size === 0) return reply(interaction, `${target}を持つメンバーがいません`);

await Promise.all(members.map(async member => await member.roles.add(role)));
await Promise.all(members.map(async member => member.roles.add(role)));
await reply(interaction, `${[...members.values()].join(", ")}${role}を付与しました`);
},
});
2 changes: 1 addition & 1 deletion src/components/buttons/roleRemove.ts
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ export default new Button({
const { members } = role;
if (members.size === 0) return reply(interaction, `${role}を持つメンバーがいません`);

await Promise.all(members.map(async member => await member.roles.remove(role)));
await Promise.all(members.map(async member => member.roles.remove(role)));
await reply(interaction, `${[...members.values()].join(", ")}から${role}を解除しました`);
},
});
4 changes: 1 addition & 3 deletions src/components/buttons/transfer.ts
Original file line number Diff line number Diff line change
Expand Up @@ -41,9 +41,7 @@ export default new Button({
const keys = message.reactions.cache.keys();
if (reactions.hasAny(...keys)) {
await Promise.all(
destinations.map(async destination => {
await transferMessage(message, destination, { noReaction: true });
})
destinations.map(async destination => transferMessage(message, destination, { noReaction: true }))
);
count++;
}
Expand Down
16 changes: 3 additions & 13 deletions src/utils/DeleteMultiMessages.ts
Original file line number Diff line number Diff line change
Expand Up @@ -22,22 +22,12 @@ export const deleteMultiMessages = async (

//bulkDeleteで100件ずつ削除
await Promise.all(
arraySplit([...recentMessages.values()], 100).map(async messagesSliced => {
await channel.bulkDelete(messagesSliced);
})
arraySplit([...recentMessages.values()], 100).map(async messagesSliced => channel.bulkDelete(messagesSliced))
);

//2週間以上前のメッセージを順番に削除(遅い)
await Promise.all(
oldMessages.map(async message => {
await message.delete();
})
);
await Promise.all(oldMessages.map(async message => message.delete()));

//メッセージに付属するスレッドも削除
await Promise.all(
threads.map(async thread => {
await thread.delete();
})
);
await Promise.all(threads.map(async thread => thread.delete()));
};
22 changes: 14 additions & 8 deletions src/utils/transferMessage.ts
Original file line number Diff line number Diff line change
@@ -1,15 +1,19 @@
import {
ActionRow,
ActionRowBuilder,
AnyThreadChannel,
Attachment,
ButtonBuilder,
ChannelType,
GuildChannel,
GuildTextBasedChannel,
Message,
MessageActionRowComponent,
MessageMentionOptions,
MessageType,
PrivateThreadChannel,
PublicThreadChannel,
ThreadChannel,
} from "discord.js";
import { fetchAllMessages } from "./FetchAllMessages";
import { splitMessage } from "./SplitMessage";
Expand Down Expand Up @@ -95,14 +99,15 @@ export const transferMessage = async (
if (!options?.noReaction) {
for await (const reaction of message.reactions.cache.keys()) newMessage.react(reaction);
}
if (message.thread && "threads" in destination) {
const name = message.thread.name;
const newThread = (
const { thread } = message;
if (thread && "threads" in destination) {
const name = thread.name;
const newThread =
message.type == MessageType.ThreadCreated
? await destination.threads.create({ name })
: await newMessage.startThread({ name })
) as PublicThreadChannel | PrivateThreadChannel;
await transferAllMessages(message.thread, newThread);
: await newMessage.startThread({ name });

await transferAllMessages(thread, newThread);
}
} catch (e: any) {
// emptyメッセージだったら無視
Expand All @@ -113,10 +118,11 @@ export const transferMessage = async (
};

export const transferAllMessages = async (
from: GuildTextBasedChannel,
to: GuildTextBasedChannel,
from: GuildChannel | AnyThreadChannel,
to: GuildChannel | ThreadChannel,
options?: transferOptions
) => {
if (!from.isTextBased() || !to.isTextBased()) return;
const messages = (await fetchAllMessages(from)).reverse();
for await (const message of messages.values()) {
await transferMessage(message, to, options);
Expand Down

0 comments on commit acf00d1

Please sign in to comment.