mirror of
https://github.com/BluemediaGER/muse.git
synced 2024-11-23 01:05:30 +01:00
Allow member who invited Muse to do initial setup (#561)
This commit is contained in:
parent
e1589c3013
commit
20eaed4a16
|
@ -5,6 +5,8 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
|
||||||
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
||||||
|
|
||||||
## [Unreleased]
|
## [Unreleased]
|
||||||
|
### Changed
|
||||||
|
- Muse will now allow the member who invited Muse to set config options. For this to work, the View Audit Logs permission must be given when inviting Muse. If it isn't given, Muse still works and will contact the owner instead for initial setup.
|
||||||
|
|
||||||
## [1.4.1] - 2022-03-12
|
## [1.4.1] - 2022-03-12
|
||||||
### Changed
|
### Changed
|
||||||
|
|
|
@ -0,0 +1,2 @@
|
||||||
|
-- AlterTable
|
||||||
|
ALTER TABLE "Setting" ADD COLUMN "invitedByUserId" TEXT;
|
|
@ -25,6 +25,7 @@ model KeyValueCache {
|
||||||
|
|
||||||
model Setting {
|
model Setting {
|
||||||
guildId String @id
|
guildId String @id
|
||||||
|
invitedByUserId String?
|
||||||
playlistLimit Int @default(50)
|
playlistLimit Int @default(50)
|
||||||
secondsToWaitAfterQueueEmpties Int @default(30)
|
secondsToWaitAfterQueueEmpties Int @default(30)
|
||||||
leaveIfNoListeners Boolean @default(true)
|
leaveIfNoListeners Boolean @default(true)
|
||||||
|
|
|
@ -152,7 +152,7 @@ export default class {
|
||||||
spinner.text = '📡 updating permissions...';
|
spinner.text = '📡 updating permissions...';
|
||||||
await Promise.all(this.client.guilds.cache.map(async guild => updatePermissionsForGuild(guild)));
|
await Promise.all(this.client.guilds.cache.map(async guild => updatePermissionsForGuild(guild)));
|
||||||
|
|
||||||
spinner.succeed(`Ready! Invite the bot with https://discordapp.com/oauth2/authorize?client_id=${this.client.user?.id ?? ''}&scope=bot%20applications.commands&permissions=36700160`);
|
spinner.succeed(`Ready! Invite the bot with https://discordapp.com/oauth2/authorize?client_id=${this.client.user?.id ?? ''}&scope=bot%20applications.commands&permissions=36700288`);
|
||||||
});
|
});
|
||||||
|
|
||||||
this.client.on('error', console.error);
|
this.client.on('error', console.error);
|
||||||
|
|
|
@ -6,16 +6,30 @@ import Config from '../services/config.js';
|
||||||
import {prisma} from '../utils/db.js';
|
import {prisma} from '../utils/db.js';
|
||||||
import {REST} from '@discordjs/rest';
|
import {REST} from '@discordjs/rest';
|
||||||
import {Routes} from 'discord-api-types/v9';
|
import {Routes} from 'discord-api-types/v9';
|
||||||
|
import updatePermissionsForGuild from '../utils/update-permissions-for-guild.js';
|
||||||
|
|
||||||
export default async (guild: Guild): Promise<void> => {
|
export default async (guild: Guild): Promise<void> => {
|
||||||
|
let invitedBy;
|
||||||
|
try {
|
||||||
|
const logs = await guild.fetchAuditLogs({type: 'BOT_ADD'});
|
||||||
|
invitedBy = logs.entries.find(entry => entry.target?.id === guild.client.user?.id)?.executor;
|
||||||
|
} catch {}
|
||||||
|
|
||||||
|
if (!invitedBy) {
|
||||||
|
console.warn(`Could not find user who invited Muse to ${guild.name} from the audit logs.`);
|
||||||
|
}
|
||||||
|
|
||||||
await prisma.setting.upsert({
|
await prisma.setting.upsert({
|
||||||
where: {
|
where: {
|
||||||
guildId: guild.id,
|
guildId: guild.id,
|
||||||
},
|
},
|
||||||
create: {
|
create: {
|
||||||
guildId: guild.id,
|
guildId: guild.id,
|
||||||
|
invitedByUserId: invitedBy?.id,
|
||||||
|
},
|
||||||
|
update: {
|
||||||
|
invitedByUserId: invitedBy?.id,
|
||||||
},
|
},
|
||||||
update: {},
|
|
||||||
});
|
});
|
||||||
|
|
||||||
const config = container.get<Config>(TYPES.Config);
|
const config = container.get<Config>(TYPES.Config);
|
||||||
|
@ -33,7 +47,12 @@ export default async (guild: Guild): Promise<void> => {
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
const owner = await guild.fetchOwner();
|
await updatePermissionsForGuild(guild);
|
||||||
|
|
||||||
await owner.send('👋 Hi! Someone (probably you) just invited me to a server you own. I can\'t be used by your server members until you complete setup by running /config set-role in your server.');
|
if (invitedBy) {
|
||||||
|
await invitedBy.send('👋 Hi! You just invited me to a server. I can\'t be used by your server members until you complete setup by running /config set-role in your server.');
|
||||||
|
} else {
|
||||||
|
const owner = await guild.fetchOwner();
|
||||||
|
await owner.send('👋 Hi! Someone (probably you) just invited me to a server you own. I can\'t be used by your server members until you complete setup by running /config set-role in your server.');
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
|
@ -26,6 +26,15 @@ const updatePermissionsForGuild = async (guild: Guild) => {
|
||||||
permission: false,
|
permission: false,
|
||||||
},
|
},
|
||||||
];
|
];
|
||||||
|
|
||||||
|
if (settings.invitedByUserId) {
|
||||||
|
permissions.push({
|
||||||
|
id: settings.invitedByUserId,
|
||||||
|
type: 'USER',
|
||||||
|
permission: true,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
const commands = await guild.commands.fetch();
|
const commands = await guild.commands.fetch();
|
||||||
|
|
||||||
await guild.commands.permissions.set({fullPermissions: commands.map(command => ({
|
await guild.commands.permissions.set({fullPermissions: commands.map(command => ({
|
||||||
|
|
Loading…
Reference in a new issue