mirror of
https://github.com/BluemediaGER/muse.git
synced 2024-11-23 01:05:30 +01:00
Create guild settings if not found (#911)
Co-authored-by: Max Isom <codetheweb@users.noreply.github.com>
This commit is contained in:
parent
6926e39c56
commit
02ee8aefc8
|
@ -6,6 +6,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
||||||
|
|
||||||
## [Unreleased]
|
## [Unreleased]
|
||||||
### Fixed
|
### Fixed
|
||||||
|
- Create the guild settings when not found instead of returning an error
|
||||||
- Add temporary workaround to avoid VoiceConnection being stuck in signalling state
|
- Add temporary workaround to avoid VoiceConnection being stuck in signalling state
|
||||||
|
|
||||||
## [2.2.0] - 2023-02-26
|
## [2.2.0] - 2023-02-26
|
||||||
|
|
|
@ -3,6 +3,7 @@ import {ChatInputCommandInteraction, EmbedBuilder, PermissionFlagsBits} from 'di
|
||||||
import {injectable} from 'inversify';
|
import {injectable} from 'inversify';
|
||||||
import {prisma} from '../utils/db.js';
|
import {prisma} from '../utils/db.js';
|
||||||
import Command from './index.js';
|
import Command from './index.js';
|
||||||
|
import {getGuildSettings} from '../utils/get-guild-settings';
|
||||||
|
|
||||||
@injectable()
|
@injectable()
|
||||||
export default class implements Command {
|
export default class implements Command {
|
||||||
|
@ -96,11 +97,7 @@ export default class implements Command {
|
||||||
case 'get': {
|
case 'get': {
|
||||||
const embed = new EmbedBuilder().setTitle('Config');
|
const embed = new EmbedBuilder().setTitle('Config');
|
||||||
|
|
||||||
const config = await prisma.setting.findUnique({where: {guildId: interaction.guild!.id}});
|
const config = await getGuildSettings(interaction.guild!.id);
|
||||||
|
|
||||||
if (!config) {
|
|
||||||
throw new Error('no config found');
|
|
||||||
}
|
|
||||||
|
|
||||||
const settingsToShow = {
|
const settingsToShow = {
|
||||||
'Playlist Limit': config.playlistLimit,
|
'Playlist Limit': config.playlistLimit,
|
||||||
|
|
|
@ -8,20 +8,20 @@ import {REST} from '@discordjs/rest';
|
||||||
import {Setting} from '@prisma/client';
|
import {Setting} from '@prisma/client';
|
||||||
import registerCommandsOnGuild from '../utils/register-commands-on-guild.js';
|
import registerCommandsOnGuild from '../utils/register-commands-on-guild.js';
|
||||||
|
|
||||||
export async function createGuildSettings(guild: Guild): Promise<Setting> {
|
export async function createGuildSettings(guildId: string): Promise<Setting> {
|
||||||
return prisma.setting.upsert({
|
return prisma.setting.upsert({
|
||||||
where: {
|
where: {
|
||||||
guildId: guild.id,
|
guildId,
|
||||||
},
|
},
|
||||||
create: {
|
create: {
|
||||||
guildId: guild.id,
|
guildId,
|
||||||
},
|
},
|
||||||
update: {},
|
update: {},
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
export default async (guild: Guild): Promise<void> => {
|
export default async (guild: Guild): Promise<void> => {
|
||||||
await createGuildSettings(guild);
|
await createGuildSettings(guild.id);
|
||||||
|
|
||||||
const config = container.get<Config>(TYPES.Config);
|
const config = container.get<Config>(TYPES.Config);
|
||||||
|
|
||||||
|
|
|
@ -3,7 +3,7 @@ import container from '../inversify.config.js';
|
||||||
import {TYPES} from '../types.js';
|
import {TYPES} from '../types.js';
|
||||||
import PlayerManager from '../managers/player.js';
|
import PlayerManager from '../managers/player.js';
|
||||||
import {getSizeWithoutBots} from '../utils/channels.js';
|
import {getSizeWithoutBots} from '../utils/channels.js';
|
||||||
import {prisma} from '../utils/db.js';
|
import {getGuildSettings} from '../utils/get-guild-settings';
|
||||||
|
|
||||||
export default async (oldState: VoiceState, _: VoiceState): Promise<void> => {
|
export default async (oldState: VoiceState, _: VoiceState): Promise<void> => {
|
||||||
const playerManager = container.get<PlayerManager>(TYPES.Managers.Player);
|
const playerManager = container.get<PlayerManager>(TYPES.Managers.Player);
|
||||||
|
@ -12,11 +12,7 @@ export default async (oldState: VoiceState, _: VoiceState): Promise<void> => {
|
||||||
|
|
||||||
if (player.voiceConnection) {
|
if (player.voiceConnection) {
|
||||||
const voiceChannel: VoiceChannel = oldState.guild.channels.cache.get(player.voiceConnection.joinConfig.channelId!) as VoiceChannel;
|
const voiceChannel: VoiceChannel = oldState.guild.channels.cache.get(player.voiceConnection.joinConfig.channelId!) as VoiceChannel;
|
||||||
const settings = await prisma.setting.findUnique({where: {guildId: player.guildId}});
|
const settings = await getGuildSettings(player.guildId);
|
||||||
|
|
||||||
if (!settings) {
|
|
||||||
throw new Error('Could not find settings for guild');
|
|
||||||
}
|
|
||||||
|
|
||||||
const {leaveIfNoListeners} = settings;
|
const {leaveIfNoListeners} = settings;
|
||||||
if (!voiceChannel || (getSizeWithoutBots(voiceChannel) === 0 && leaveIfNoListeners)) {
|
if (!voiceChannel || (getSizeWithoutBots(voiceChannel) === 0 && leaveIfNoListeners)) {
|
||||||
|
|
|
@ -6,9 +6,9 @@ import {TYPES} from '../types.js';
|
||||||
import GetSongs from '../services/get-songs.js';
|
import GetSongs from '../services/get-songs.js';
|
||||||
import {SongMetadata, STATUS} from './player.js';
|
import {SongMetadata, STATUS} from './player.js';
|
||||||
import PlayerManager from '../managers/player.js';
|
import PlayerManager from '../managers/player.js';
|
||||||
import {prisma} from '../utils/db.js';
|
|
||||||
import {buildPlayingMessageEmbed} from '../utils/build-embed.js';
|
import {buildPlayingMessageEmbed} from '../utils/build-embed.js';
|
||||||
import {getMemberVoiceChannel, getMostPopularVoiceChannel} from '../utils/channels.js';
|
import {getMemberVoiceChannel, getMostPopularVoiceChannel} from '../utils/channels.js';
|
||||||
|
import {getGuildSettings} from '../utils/get-guild-settings';
|
||||||
|
|
||||||
@injectable()
|
@injectable()
|
||||||
export default class AddQueryToQueue {
|
export default class AddQueryToQueue {
|
||||||
|
@ -34,11 +34,7 @@ export default class AddQueryToQueue {
|
||||||
|
|
||||||
const [targetVoiceChannel] = getMemberVoiceChannel(interaction.member as GuildMember) ?? getMostPopularVoiceChannel(interaction.guild!);
|
const [targetVoiceChannel] = getMemberVoiceChannel(interaction.member as GuildMember) ?? getMostPopularVoiceChannel(interaction.guild!);
|
||||||
|
|
||||||
const settings = await prisma.setting.findUnique({where: {guildId}});
|
const settings = await getGuildSettings(guildId);
|
||||||
|
|
||||||
if (!settings) {
|
|
||||||
throw new Error('Could not find settings for guild');
|
|
||||||
}
|
|
||||||
|
|
||||||
const {playlistLimit} = settings;
|
const {playlistLimit} = settings;
|
||||||
|
|
||||||
|
|
|
@ -18,7 +18,7 @@ import {
|
||||||
} from '@discordjs/voice';
|
} from '@discordjs/voice';
|
||||||
import FileCacheProvider from './file-cache.js';
|
import FileCacheProvider from './file-cache.js';
|
||||||
import debug from '../utils/debug.js';
|
import debug from '../utils/debug.js';
|
||||||
import {prisma} from '../utils/db.js';
|
import {getGuildSettings} from '../utils/get-guild-settings';
|
||||||
|
|
||||||
export enum MediaSource {
|
export enum MediaSource {
|
||||||
Youtube,
|
Youtube,
|
||||||
|
@ -272,11 +272,7 @@ export default class {
|
||||||
this.audioPlayer?.stop();
|
this.audioPlayer?.stop();
|
||||||
this.status = STATUS.IDLE;
|
this.status = STATUS.IDLE;
|
||||||
|
|
||||||
const settings = await prisma.setting.findUnique({where: {guildId: this.guildId}});
|
const settings = await getGuildSettings(this.guildId);
|
||||||
|
|
||||||
if (!settings) {
|
|
||||||
throw new Error('Could not find settings for guild');
|
|
||||||
}
|
|
||||||
|
|
||||||
const {secondsToWaitAfterQueueEmpties} = settings;
|
const {secondsToWaitAfterQueueEmpties} = settings;
|
||||||
if (secondsToWaitAfterQueueEmpties !== 0) {
|
if (secondsToWaitAfterQueueEmpties !== 0) {
|
||||||
|
|
12
src/utils/get-guild-settings.ts
Normal file
12
src/utils/get-guild-settings.ts
Normal file
|
@ -0,0 +1,12 @@
|
||||||
|
import {Setting} from '@prisma/client';
|
||||||
|
import {prisma} from './db';
|
||||||
|
import {createGuildSettings} from '../events/guild-create';
|
||||||
|
|
||||||
|
export async function getGuildSettings(guildId: string): Promise<Setting> {
|
||||||
|
const config = await prisma.setting.findUnique({where: {guildId}});
|
||||||
|
if (!config) {
|
||||||
|
return createGuildSettings(guildId);
|
||||||
|
}
|
||||||
|
|
||||||
|
return config;
|
||||||
|
}
|
Loading…
Reference in a new issue