Skip to content

Commit

Permalink
chore: release 3.0.0
Browse files Browse the repository at this point in the history
  • Loading branch information
gx1285 committed Jul 14, 2023
1 parent 5930d7f commit ce7dca0
Show file tree
Hide file tree
Showing 22 changed files with 1,157 additions and 73 deletions.
2 changes: 1 addition & 1 deletion CONTRIBUTING.md
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ yarn@3.6.1を使用してください。
1. その内容の Pull request が既に存在していないかを確認して下さい。(マージ済み、クローズ済みのものも)
2. もう実装されていないか確認して下さい。
3. Fork し、コードを書いて、内容を書き込みます。
4. Pull request を作成します。(developブランチによろしくお願いいたします。)
4. Pull request を作成します。(develop ブランチによろしくお願いいたします。)

## コミットメッセージ

Expand Down
26 changes: 16 additions & 10 deletions config.example.json
Original file line number Diff line number Diff line change
@@ -1,18 +1,24 @@
{
"token": "Discord Bot Token",
"owners": ["user id"],
"mods": ["user id"],
"token": "",
"owners": [
""
],
"mods": [
""
],
"channelIds": {
"error": "channel id",
"botLog": "channel id",
"commandLog": "channel id"
"error": "",
"botLog": "",
"commandLog": ""
},
"clientId": "user id",
"clientId": "",
"mongoDBUrl": "",
"load": {
"chatinput": true,
"messagecotextmenu": true,
"usercotextmenu": true
},
"mongoDBUrl": "mongoDBUrl",
"key": "key"
}
"sgcJsonChannelId": "",
"sgcJsonChannelIdv2": "",
"key": ""
}
18 changes: 11 additions & 7 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -13,18 +13,22 @@
"start": "node dist/src/index.js"
},
"dependencies": {
"@discordjs/rest": "^1.7.2-dev.1689034321-09b0382.0",
"discord.js": "^14.11.1-dev.1689034320-09b0382.0",
"enka-network-api": "^3.7.0",
"@discordjs/rest": "^1.7.2-dev.1689249890-ceab07b.0",
"discord.js": "^14.11.1-dev.1689249910-ceab07b.0",
"enka-network-api": "^3.7.1",
"json-bigint": "^1.0.0",
"mongoose": "^7.3.2",
"typescript": "^5.1.6"
"mongoose": "^7.3.4",
"typescript": "^5.1.6",
"ws": "^8.13.0",
"xml2js": "^0.6.0"
},
"devDependencies": {
"@commitlint/cli": "^17.6.6",
"@commitlint/config-conventional": "^17.6.6",
"@types/json-bigint": "^1.0.1",
"@types/node": "20.4.1",
"@types/node": "20.4.2",
"@types/ws": "^8.5.5",
"@types/xml2js": "^0.4.11",
"@typescript-eslint/eslint-plugin": "^6.0.0",
"@typescript-eslint/parser": "^6.0.0",
"@yarnpkg/pnpify": "3.1.6",
Expand All @@ -34,7 +38,7 @@
"eslint-formatter-pretty": "^5.0.0",
"eslint-plugin-unicorn": "^47.0.0",
"husky": "^8.0.3",
"prettier": "^3.0.0",
"prettier": "2.8.8",
"rimraf": "^5.0.1"
},
"engines": {
Expand Down
33 changes: 33 additions & 0 deletions src/command/chatinput/afk.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
import { ChatInputCommandInteraction, Colors, EmbedBuilder, SlashCommandBuilder } from 'discord.js';

export default {
command: new SlashCommandBuilder()
.setName('afk')
.setDescription('afkが設定または解除されます。')
.addStringOption((input) => input.setName('reason').setDescription('理由').setRequired(false)),
ownersOnly: false,
modOnly: false,
permissions: false,
async execute(interaction: ChatInputCommandInteraction) {
const { afk, mention } = interaction.client.botData.afk;
const mentions: string[] | undefined = await mention.get(interaction.user.id);
if (await afk.get(interaction.user.id)) {
await afk.delete(interaction.user.id);
const embed = new EmbedBuilder()
.setColor(Colors.Blue)
.setTitle('✅ afkを解除しました。')
.setDescription('解除に成功しました。');
if (mentions) {
embed.addFields({ name: 'メンション: ', value: mentions.join('\n') });
await mention.delete(interaction.user.id);
}
await interaction.reply({
ephemeral: false,
embeds: [embed],
});
} else {
await afk.set(interaction.user.id, interaction.options.getString('reason') || true);
await interaction.ok('afkを設定しました。', 'afkになりました。', false);
}
},
};
95 changes: 95 additions & 0 deletions src/command/chatinput/bot_invite.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,95 @@
import {
ActionRowBuilder,
ButtonBuilder,
ButtonStyle,
ChatInputCommandInteraction,
Colors,
EmbedBuilder,
PermissionsBitField,
SlashCommandBuilder,
} from 'discord.js';

export default {
command: new SlashCommandBuilder()
.setName('bot_invite')
.setDescription('指定したbotの招待リンクを生成します。')
.addUserOption((input) => input.setName('bot').setDescription('bot').setRequired(false)),
ownersOnly: false,
modOnly: false,
permissions: false,
async execute(interaction: ChatInputCommandInteraction) {
const bot = interaction.options.getUser('bot');
if (!bot)
return await interaction.reply({
embeds: [
new EmbedBuilder()
.setTitle(`${interaction.client.user.tag}を招待する。`)
.setColor(Colors.Blue)
.setDescription('下のボタンから招待できます。')
.setThumbnail(interaction.client.user.extDefaultAvatarURL({ extension: 'webp' })),
],
components: [
new ActionRowBuilder<ButtonBuilder>().addComponents(
new ButtonBuilder()
.setStyle(ButtonStyle.Link)
.setLabel('管理者権限')
.setURL(
`https://discord.com/api/oauth2/authorize?client_id=${
interaction.client.user.id
}&permissions=${PermissionsBitField.Flags.Administrator.toString()}&scope=bot%20applications.commands`,
),
new ButtonBuilder()
.setStyle(ButtonStyle.Link)
.setLabel('権限選択')
.setURL(
`https://discord.com/api/oauth2/authorize?client_id=${
interaction.client.user.id
}&permissions=${PermissionsBitField.All.toString()}&scope=bot%20applications.commands`,
),
new ButtonBuilder()
.setStyle(ButtonStyle.Link)
.setLabel('権限なし')
.setURL(
`https://discord.com/api/oauth2/authorize?client_id=${interaction.client.user.id}&permissions=0&scope=bot%20applications.commands`,
),
),
],
});
if (!bot.bot) return await interaction.error('指定されたものはbotではありません', 'botを指定してください。', true);
await interaction.reply({
embeds: [
new EmbedBuilder()
.setTitle(`${bot.tag}を招待する。`)
.setColor(Colors.Blue)
.setDescription('下のボタンから招待できます。')
.setThumbnail(bot.extDefaultAvatarURL({ extension: 'webp' })),
],
components: [
new ActionRowBuilder<ButtonBuilder>().addComponents(
new ButtonBuilder()
.setStyle(ButtonStyle.Link)
.setLabel('管理者権限')
.setURL(
`https://discord.com/api/oauth2/authorize?client_id=${
bot.id
}&permissions=${PermissionsBitField.Flags.Administrator.toString()}&scope=bot%20applications.commands`,
),
new ButtonBuilder()
.setStyle(ButtonStyle.Link)
.setLabel('権限選択')
.setURL(
`https://discord.com/api/oauth2/authorize?client_id=${
bot.id
}&permissions=${PermissionsBitField.All.toString()}&scope=bot%20applications.commands`,
),
new ButtonBuilder()
.setStyle(ButtonStyle.Link)
.setLabel('権限なし')
.setURL(
`https://discord.com/api/oauth2/authorize?client_id=${bot.id}&permissions=0&scope=bot%20applications.commands`,
),
),
],
});
},
};
26 changes: 25 additions & 1 deletion src/command/chatinput/globalchat.ts
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ import {
SlashCommandBuilder,
Webhook,
} from 'discord.js';
import { translatePermission } from '../../utils/permission.js';

export default {
command: new SlashCommandBuilder()
Expand All @@ -18,9 +19,32 @@ export default {
),
ownersOnly: false,
modOnly: false,
permissions: [PermissionFlagsBits.ManageMessages, PermissionFlagsBits.ManageWebhooks],
permissions: false,

async execute(interaction: ChatInputCommandInteraction) {
const permissions = [PermissionFlagsBits.ManageChannels];
const authorPerms = interaction.channel.permissionsFor(interaction.guild.members.cache.get(interaction.user.id));
if (!authorPerms || !permissions.every((permission) => authorPerms.has(permission))) {
const permission: bigint[] = permissions;
return await interaction.error(
'権限不足',
'このコマンドを実行するためには、あなたに`' +
translatePermission(permission).join(', ') +
'`の権限が必要です。',
true,
);
}
const botPerms = interaction.channel.permissionsFor(
interaction.guild.members.cache.get(interaction.client.user.id),
);
if (!botPerms || !permissions.every((permission) => botPerms.has(permission))) {
const permission: bigint[] = permissions;
return await interaction.error(
'権限不足',
'このコマンドを実行するためには、Botに`' + translatePermission(permission).join(', ') + '`の権限が必要です。',
true,
);
}
const { register, blocks } = interaction.client.botData.globalChat;
const optionsChannel = interaction.options.getChannel('channel', true, [ChannelType.GuildText]);

Expand Down
65 changes: 65 additions & 0 deletions src/command/chatinput/slot.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,65 @@
import { ChatInputCommandInteraction, SlashCommandBuilder, PermissionFlagsBits } from 'discord.js';
import { setTimeout } from 'node:timers/promises';
export default {
command: new SlashCommandBuilder().setName('slot').setDescription('スロットができます。').setGuildOnly(),
ownersOnly: false,
modOnly: false,
permissions: [PermissionFlagsBits.ManageMessages, PermissionFlagsBits.MentionEveryone],
async execute(interaction: ChatInputCommandInteraction) {
const array = [
'🍏',
'🍎',
'🍐',
'🍊',
'🍋',
'🍉',
'🍇',
'🫐',
'🍅',
'🥝',
'🍍',
'🍒',
'🍈',
'🍓',
'🍏',
'🍎',
'🍐',
'🍊',
'🍋',
'🍉',
'🍇',
'🫐',
'🍅',
'🥝',
'🍍',
'🍒',
'🍈',
'🍓',
];

const random = Math.floor(Math.random() * array.length);
const result = array[random];
const random2 = Math.floor(Math.random() * array.length);
const result2 = array[random2];
const random3 = Math.floor(Math.random() * array.length);
const result3 = array[random3];
await interaction.reply(result + result2 + result3);
let x = 0;
while (x < 10) {
x++;
await setTimeout(1000);
const random = Math.floor(Math.random() * array.length);
const result = array[random];
const random2 = Math.floor(Math.random() * array.length);
const result2 = array[random2];
const random3 = Math.floor(Math.random() * array.length);
const result3 = array[random3];
await interaction.editReply(result + result2 + result3);
if (x == 10) {
await (result === result2 && result2 === result3
? interaction.followUp('あなたは勝利しました。')
: interaction.followUp('あなたは負けました。'));
}
}
},
};
51 changes: 51 additions & 0 deletions src/command/chatinput/superglobalchat.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,51 @@
import { ChannelType, ChatInputCommandInteraction, PermissionFlagsBits, SlashCommandBuilder } from 'discord.js';
import { translatePermission } from '../../utils/permission.js';

export default {
command: new SlashCommandBuilder()
.setName('superglobalchat')
.setDescription('スーパーグローバルチャットに参加/退出します。')
.setGuildOnly()
.addChannelOption((input) =>
input.addChannelTypes(ChannelType.GuildText).setName('channel').setDescription('チャンネル').setRequired(true),
),
ownersOnly: true,
modOnly: false,
permissions: false,

async execute(interaction: ChatInputCommandInteraction) {
const permissions = [PermissionFlagsBits.ManageChannels];
const authorPerms = interaction.channel.permissionsFor(interaction.guild.members.cache.get(interaction.user.id));
if (!authorPerms || !permissions.every((permission) => authorPerms.has(permission))) {
const permission: bigint[] = permissions;
return await interaction.error(
'権限不足',
'このコマンドを実行するためには、あなたに`' +
translatePermission(permission).join(', ') +
'`の権限が必要です。',
true,
);
}
const botPerms = interaction.channel.permissionsFor(
interaction.guild.members.cache.get(interaction.client.user.id),
);
if (!botPerms || !permissions.every((permission) => botPerms.has(permission))) {
const permission: bigint[] = permissions;
return await interaction.error(
'権限不足',
'このコマンドを実行するためには、Botに`' + translatePermission(permission).join(', ') + '`の権限が必要です。',
true,
);
}
const { register } = interaction.client.botData.superGlobalChat;
const optionsChannel = interaction.options.getChannel('channel', true, [ChannelType.GuildText]);

if (await register.get(optionsChannel.id)) {
await register.delete(optionsChannel.id);
await interaction.ok('退出しました。', '退出が完了しました。', false);
} else {
await register.set(optionsChannel.id, true);
await interaction.ok('参加しました。', '参加が完了しました。', false);
}
},
};
Loading

0 comments on commit ce7dca0

Please sign in to comment.