Skip to content

Commit

Permalink
setupでキャラクター名を選択できるように変更
Browse files Browse the repository at this point in the history
  • Loading branch information
minarin0179 committed Aug 5, 2023
1 parent 22903b9 commit 188b0ab
Showing 1 changed file with 58 additions and 52 deletions.
110 changes: 58 additions & 52 deletions src/commands/slashcommands/setup.ts
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,12 @@ export default new SlashCommand({
.setDescription("個別のチャンネルは作られますがロールは作成されません")
.setRequired(false)
.addChoices({ name: "はい", value: "true" }, { name: "いいえ", value: "false" })
)
.addStringOption(option =>
option
.setName("キャラ名を指定")
.setDescription("キャラクターの名前をスペース区切りで入力してください")
.setRequired(false)
) as SlashCommandBuilder,

execute: async ({ interaction, args }) => {
Expand All @@ -36,19 +42,22 @@ export default new SlashCommand({
const title = args.getString("シナリオ名", true);
const playerCount = args.getInteger("プレイヤー数", true);
const privateCount = args.getInteger("密談チャンネル数", true);
const characters =
args.getString("キャラ名を指定")?.split(/[  ,、]/) ?? [...Array(playerCount)].map((_, i) => `PC${i + 1}`);

const role = args.getRole("ロールの作成位置") ?? everyone;

const rolePosition = role?.position;
const { position } = role;

if (playerCount + privateCount + 5 >= 50)
return reply(interaction, "カテゴリーに入り切りません\nチャンネル数を減らしてください");
if (characters.length !== playerCount) return reply(interaction, "プレイヤー数とキャラクター数が一致しません");

await interaction.deferReply({ ephemeral: true });

const GM = await guild.roles.create({ name: `${title} GM`, position: rolePosition });
const PL = await guild.roles.create({ name: `${title} PL`, position: rolePosition });
const SP = await guild.roles.create({ name: `${title} 観戦`, position: rolePosition });
const GM = await guild.roles.create({ name: `${title} GM`, position });
const PL = await guild.roles.create({ name: `${title} PL`, position });
const SP = await guild.roles.create({ name: `${title} 観戦`, position });

const invisible = { deny: [PermissionFlagsBits.ViewChannel, PermissionFlagsBits.Connect] }; //見えない
const visible = {
Expand All @@ -69,68 +78,65 @@ export default new SlashCommand({
permissionOverwrites: [...defaultPerm, { id: PL.id, ...invisible }, { id: SP.id, ...visible }],
});

await guild.channels.create({
name: "一般",
type: ChannelType.GuildText,
parent: category,
permissionOverwrites: [...defaultPerm, { id: PL.id, ...writable }, { id: SP.id, ...writable }],
});
await Promise.all([
guild.channels.create({
name: "一般",
type: ChannelType.GuildText,
parent: category,
permissionOverwrites: [...defaultPerm, { id: PL.id, ...writable }, { id: SP.id, ...writable }],
}),

await guild.channels.create({
name: "共通情報",
type: ChannelType.GuildText,
parent: category,
permissionOverwrites: [...defaultPerm, { id: PL.id, ...visible }, { id: SP.id, ...visible }],
});
guild.channels.create({
name: "共通情報",
type: ChannelType.GuildText,
parent: category,
permissionOverwrites: [...defaultPerm, { id: PL.id, ...visible }, { id: SP.id, ...visible }],
}),

await guild.channels.create({
name: "観戦",
type: ChannelType.GuildText,
parent: category,
permissionOverwrites: [...defaultPerm, { id: PL.id, ...invisible }, { id: SP.id, ...writable }],
});
guild.channels.create({
name: "観戦",
type: ChannelType.GuildText,
parent: category,
permissionOverwrites: [...defaultPerm, { id: PL.id, ...invisible }, { id: SP.id, ...writable }],
}),
...characters.map(async (name, i) => {
const perm = [...defaultPerm, { id: SP.id, ...visible }];

for (let i = 0; i < playerCount; i++) {
const perm = [...defaultPerm, { id: SP.id, ...visible }];
if (!(interaction.options.getString("個別ロールを作成しない") === "true")) {
const pcRole = await guild.roles.create({ name: `${title} ${name}`, position });
perm.push({ id: pcRole.id, ...writable });
}

if (!(interaction.options.getString("個別ロールを作成しない") === "true")) {
const PL_i = await guild.roles.create({ name: `${title} PL${i + 1}`, position: rolePosition });
perm.push({ id: PL_i.id, ...writable });
}
await guild.channels.create({
name,
type: ChannelType.GuildText,
parent: category,
permissionOverwrites: perm,
});
}),

await guild.channels.create({
name: `pc${i + 1}`,
guild.channels.create({
name: "解説",
type: ChannelType.GuildText,
parent: category,
permissionOverwrites: perm,
});
}

await guild.channels.create({
name: "解説",
type: ChannelType.GuildText,
parent: category,
permissionOverwrites: [...defaultPerm, { id: PL.id, ...invisible }, { id: SP.id, ...visible }],
});

await guild.channels.create({
name: "全体会議",
type: ChannelType.GuildVoice,
parent: category,
permissionOverwrites: [...defaultPerm, { id: PL.id, ...writable }, { id: SP.id, ...writable }],
});
permissionOverwrites: [...defaultPerm, { id: PL.id, ...invisible }, { id: SP.id, ...visible }],
}),
guild.channels.create({
name: "全体会議",
type: ChannelType.GuildVoice,
parent: category,
permissionOverwrites: [...defaultPerm, { id: PL.id, ...writable }, { id: SP.id, ...writable }],
}),

await Promise.all(
[...Array(privateCount)].map(async (_, i) => {
...[...Array(privateCount)].map(async (_, i) => {
await guild.channels.create({
name: `密談場所${i + 1}`,
type: ChannelType.GuildVoice,
parent: category,
permissionOverwrites: [...defaultPerm, { id: PL.id, ...writable }, { id: SP.id, ...writable }],
});
})
);

}),
]);
await reply(interaction, `「${title}」の作成が完了しました`);
},
});

0 comments on commit 188b0ab

Please sign in to comment.