mirror of
https://github.com/spacebarchat/server.git
synced 2024-11-22 02:12:40 +01:00
Implement community "create one for me"
This commit is contained in:
parent
25099aecb7
commit
326bf08df0
@ -18,11 +18,13 @@
|
||||
|
||||
import { route } from "@spacebar/api";
|
||||
import {
|
||||
Channel,
|
||||
DiscordApiErrors,
|
||||
Guild,
|
||||
GuildUpdateEvent,
|
||||
GuildUpdateSchema,
|
||||
Member,
|
||||
Permissions,
|
||||
SpacebarApiErrors,
|
||||
emitEvent,
|
||||
getPermission,
|
||||
@ -155,6 +157,76 @@ router.patch(
|
||||
guild.features = body.features;
|
||||
}
|
||||
|
||||
if (body.public_updates_channel_id == "1") {
|
||||
// move all channels up 1
|
||||
await Channel.createQueryBuilder("channels")
|
||||
.where({ guild: { id: guild_id } })
|
||||
.update({ position: () => "position + 1" })
|
||||
.execute();
|
||||
|
||||
// create an updates channel for them
|
||||
await Channel.createChannel(
|
||||
{
|
||||
name: "moderator-only",
|
||||
guild_id: guild.id,
|
||||
position: 0,
|
||||
type: 0,
|
||||
permission_overwrites: [
|
||||
// remove SEND_MESSAGES from @everyone
|
||||
{
|
||||
id: guild.id,
|
||||
allow: "0",
|
||||
deny: Permissions.FLAGS.VIEW_CHANNEL.toString(),
|
||||
type: 0,
|
||||
},
|
||||
],
|
||||
},
|
||||
undefined,
|
||||
{ skipPermissionCheck: true },
|
||||
);
|
||||
} else if (body.public_updates_channel_id != undefined) {
|
||||
// ensure channel exists in this guild
|
||||
await Channel.findOneOrFail({
|
||||
where: { guild_id, id: body.public_updates_channel_id },
|
||||
select: { id: true },
|
||||
});
|
||||
}
|
||||
|
||||
if (body.rules_channel_id == "1") {
|
||||
// move all channels up 1
|
||||
await Channel.createQueryBuilder("channels")
|
||||
.where({ guild: { id: guild_id } })
|
||||
.update({ position: () => "position + 1" })
|
||||
.execute();
|
||||
|
||||
// create a rules for them
|
||||
await Channel.createChannel(
|
||||
{
|
||||
name: "rules",
|
||||
guild_id: guild.id,
|
||||
position: 0,
|
||||
type: 0,
|
||||
permission_overwrites: [
|
||||
// remove SEND_MESSAGES from @everyone
|
||||
{
|
||||
id: guild.id,
|
||||
allow: "0",
|
||||
deny: Permissions.FLAGS.SEND_MESSAGES.toString(),
|
||||
type: 0,
|
||||
},
|
||||
],
|
||||
},
|
||||
undefined,
|
||||
{ skipPermissionCheck: true },
|
||||
);
|
||||
} else if (body.rules_channel_id != undefined) {
|
||||
// ensure channel exists in this guild
|
||||
await Channel.findOneOrFail({
|
||||
where: { guild_id, id: body.rules_channel_id },
|
||||
select: { id: true },
|
||||
});
|
||||
}
|
||||
|
||||
// TODO: check if body ids are valid
|
||||
guild.assign(body);
|
||||
|
||||
|
@ -16,6 +16,7 @@
|
||||
along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
import { HTTPError } from "lambert-server";
|
||||
import {
|
||||
Column,
|
||||
Entity,
|
||||
@ -24,26 +25,25 @@ import {
|
||||
OneToMany,
|
||||
RelationId,
|
||||
} from "typeorm";
|
||||
import { BaseClass } from "./BaseClass";
|
||||
import { Guild } from "./Guild";
|
||||
import { PublicUserProjection, User } from "./User";
|
||||
import { HTTPError } from "lambert-server";
|
||||
import { DmChannelDTO } from "../dtos";
|
||||
import { ChannelCreateEvent, ChannelRecipientRemoveEvent } from "../interfaces";
|
||||
import {
|
||||
InvisibleCharacters,
|
||||
Snowflake,
|
||||
containsAll,
|
||||
emitEvent,
|
||||
getPermission,
|
||||
Snowflake,
|
||||
trimSpecial,
|
||||
InvisibleCharacters,
|
||||
} from "../util";
|
||||
import { ChannelCreateEvent, ChannelRecipientRemoveEvent } from "../interfaces";
|
||||
import { Recipient } from "./Recipient";
|
||||
import { BaseClass } from "./BaseClass";
|
||||
import { Guild } from "./Guild";
|
||||
import { Invite } from "./Invite";
|
||||
import { Message } from "./Message";
|
||||
import { ReadState } from "./ReadState";
|
||||
import { Invite } from "./Invite";
|
||||
import { Recipient } from "./Recipient";
|
||||
import { PublicUserProjection, User } from "./User";
|
||||
import { VoiceState } from "./VoiceState";
|
||||
import { Webhook } from "./Webhook";
|
||||
import { DmChannelDTO } from "../dtos";
|
||||
|
||||
export enum ChannelType {
|
||||
GUILD_TEXT = 0, // a text channel within a guild
|
||||
@ -302,8 +302,10 @@ export class Channel extends BaseClass {
|
||||
: channel.position) || 0,
|
||||
};
|
||||
|
||||
const ret = Channel.create(channel);
|
||||
|
||||
await Promise.all([
|
||||
Channel.create(channel).save(),
|
||||
ret.save(),
|
||||
!opts?.skipEventEmit
|
||||
? emitEvent({
|
||||
event: "CHANNEL_CREATE",
|
||||
@ -313,7 +315,7 @@ export class Channel extends BaseClass {
|
||||
: Promise.resolve(),
|
||||
]);
|
||||
|
||||
return channel;
|
||||
return ret;
|
||||
}
|
||||
|
||||
static async createDMChannel(
|
||||
|
Loading…
Reference in New Issue
Block a user