use existing private channels
This commit is contained in:
parent
a29e2074a5
commit
f3e2715703
@ -1,4 +1,4 @@
|
||||
import { SlashCommandBuilder } from 'discord.js';
|
||||
import { ChannelType, SlashCommandBuilder } from 'discord.js';
|
||||
import { VoiceChannel } from '../../../database.js';
|
||||
|
||||
export const data = new SlashCommandBuilder()
|
||||
@ -39,13 +39,16 @@ export async function execute(interaction) {
|
||||
|
||||
step = 'create';
|
||||
// Create new channel
|
||||
const channel = await guild.create({
|
||||
const channel = await guild.channels.create({
|
||||
name, type: ChannelType.GuildVoice
|
||||
});
|
||||
|
||||
// Save channel data
|
||||
step = 'save';
|
||||
await VoiceChannel.create({ id: channel.id });
|
||||
await VoiceChannel.create({
|
||||
id: channel.id,
|
||||
create: true
|
||||
});
|
||||
|
||||
// Reply success to acknowledge command
|
||||
await interaction.reply({
|
||||
@ -64,7 +67,7 @@ export async function execute(interaction) {
|
||||
|
||||
// Save channel data
|
||||
step = 'save';
|
||||
await VoiceChannel.create({ id });
|
||||
await VoiceChannel.create({ id, create: true });
|
||||
|
||||
// Reply success to acknowledge command
|
||||
await interaction.reply({
|
||||
|
@ -1,26 +1,19 @@
|
||||
import { ChannelType, Events, PermissionsBitField } from 'discord.js';
|
||||
import { VoiceChannel } from '../../database.js';
|
||||
|
||||
export const name = Events.VoiceStateUpdate;
|
||||
export async function execute(_, state) {
|
||||
if (!state.channel) return;
|
||||
|
||||
// Find channel by id, return if not registered for customs
|
||||
const channel = await VoiceChannel.findOne({
|
||||
const getchannel = async (member, channels) => {
|
||||
// Check database for existing channel
|
||||
const ownCh = await VoiceChannel.findOne({
|
||||
where: {
|
||||
id: state.channel.id
|
||||
owner: member.user.id
|
||||
}
|
||||
});
|
||||
if (channel === null) return;
|
||||
if (ownCh !== null) {
|
||||
return await channels.fetch(ownCh.id);
|
||||
}
|
||||
|
||||
// Extract user data
|
||||
const member = state.member;
|
||||
const name = member.user.username;
|
||||
|
||||
// Extract channel data
|
||||
const channels = state.guild.channels;
|
||||
try {
|
||||
// Create private channel with all permissions
|
||||
const name = member.user.username;
|
||||
const chName = `${name}${name.endsWith('s') ? "'" : "'s"} channel`;
|
||||
const privCh = await channels.create({
|
||||
name: chName,
|
||||
@ -35,11 +28,43 @@ export async function execute(_, state) {
|
||||
]
|
||||
});
|
||||
|
||||
// Save newly created channel
|
||||
await VoiceChannel.create({
|
||||
id: privCh.id,
|
||||
owner: member.user.id
|
||||
})
|
||||
|
||||
return privCh;
|
||||
};
|
||||
|
||||
export const name = Events.VoiceStateUpdate;
|
||||
export async function execute(_, state) {
|
||||
if (!state.channel) return;
|
||||
|
||||
// Find channel by id, return if not registered for customs
|
||||
const createCh = await VoiceChannel.findOne({
|
||||
where: {
|
||||
id: state.channel.id,
|
||||
create: true,
|
||||
}
|
||||
});
|
||||
if (createCh === null) return;
|
||||
|
||||
// Extract user data
|
||||
const member = state.member;
|
||||
|
||||
// Extract channel data
|
||||
const channels = state.guild.channels;
|
||||
let step = 'create';
|
||||
try {
|
||||
const privCh = await getchannel(member, channels);
|
||||
|
||||
step = 'move to';
|
||||
// Move user to private channel
|
||||
await state.setChannel(privCh);
|
||||
console.info(`[INFO] User '${name}' created private channel with ID ${privCh.id}.`);
|
||||
} catch (error) {
|
||||
console.error(error);
|
||||
await member.send('Could no create or move to channel! Please contact server staff.');
|
||||
await member.send(`Failed to ${step} channel! Please contact server staff.`);
|
||||
}
|
||||
}
|
||||
|
@ -1,10 +1,18 @@
|
||||
import { DataTypes } from 'sequelize';
|
||||
|
||||
export default function (sequelize) {
|
||||
export default function(sequelize) {
|
||||
return sequelize.define('VoiceChannel', {
|
||||
id: {
|
||||
type: DataTypes.STRING,
|
||||
primaryKey: true
|
||||
},
|
||||
create: {
|
||||
type: DataTypes.BOOLEAN
|
||||
},
|
||||
owner: {
|
||||
type: DataTypes.STRING,
|
||||
defaultValue: false,
|
||||
allowNull: true
|
||||
}
|
||||
});
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user