mirror of
https://github.com/ZeppelinBot/Zeppelin.git
synced 2025-05-10 12:25:02 +00:00
Pre-plugin moves
This commit is contained in:
parent
9fc045cd38
commit
8f7a6510eb
13 changed files with 62 additions and 52 deletions
|
@ -1,9 +1,9 @@
|
|||
import { Constants, Guild, Member, Role } from "eris";
|
||||
import { Guild, GuildMember, Permissions, Role } from "discord.js";
|
||||
import { getMissingPermissions } from "./getMissingPermissions";
|
||||
import { hasDiscordPermissions } from "./hasDiscordPermissions";
|
||||
|
||||
export function canAssignRole(guild: Guild, member: Member, roleId: string) {
|
||||
if (getMissingPermissions(member.permission, Constants.Permissions.manageRoles)) {
|
||||
export function canAssignRole(guild: Guild, member: GuildMember, roleId: string) {
|
||||
if (getMissingPermissions(member.permissions, Permissions.FLAGS.MANAGE_ROLES)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
|
@ -11,14 +11,14 @@ export function canAssignRole(guild: Guild, member: Member, roleId: string) {
|
|||
return false;
|
||||
}
|
||||
|
||||
const targetRole = guild.roles.get(roleId);
|
||||
const targetRole = guild.roles.cache.get(roleId);
|
||||
if (!targetRole) {
|
||||
return false;
|
||||
}
|
||||
|
||||
const memberRoles = member.roles.map(_roleId => guild.roles.get(_roleId)!);
|
||||
const memberRoles = member.roles.cache;
|
||||
const highestRoleWithManageRoles = memberRoles.reduce<Role | null>((highest, role) => {
|
||||
if (!hasDiscordPermissions(role.permissions, Constants.Permissions.manageRoles)) return highest;
|
||||
if (!hasDiscordPermissions(role.permissions, Permissions.FLAGS.MANAGE_ROLES)) return highest;
|
||||
if (highest == null) return role;
|
||||
if (role.position > highest.position) return role;
|
||||
return highest;
|
||||
|
|
|
@ -1,8 +1,8 @@
|
|||
import { Constants, GuildChannel, Member } from "eris";
|
||||
import { readChannelPermissions } from "./readChannelPermissions";
|
||||
import { getMissingChannelPermissions } from "./getMissingChannelPermissions";
|
||||
import { GuildChannel, GuildMember } from "discord.js";
|
||||
|
||||
export function canReadChannel(channel: GuildChannel, member: Member) {
|
||||
export function canReadChannel(channel: GuildChannel, member: GuildMember) {
|
||||
// Not missing permissions required to read the channel = can read channel
|
||||
return !getMissingChannelPermissions(member, channel, readChannelPermissions);
|
||||
}
|
||||
|
|
|
@ -1,9 +1,18 @@
|
|||
import { APIMessage, Client, Message, MessageReaction, PartialUser, TextChannel, User } from "discord.js";
|
||||
import {
|
||||
APIMessage,
|
||||
Client,
|
||||
Message,
|
||||
MessageOptions,
|
||||
MessageReaction,
|
||||
PartialUser,
|
||||
TextChannel,
|
||||
User,
|
||||
} from "discord.js";
|
||||
import { Awaitable } from "knub/dist/utils";
|
||||
import { MINUTES, noop } from "../utils";
|
||||
import Timeout = NodeJS.Timeout;
|
||||
|
||||
export type LoadPageFn = (page: number) => Awaitable<MessageContent>;
|
||||
export type LoadPageFn = (page: number) => Awaitable<MessageOptions>;
|
||||
|
||||
export interface PaginateMessageOpts {
|
||||
timeout: number;
|
||||
|
@ -24,7 +33,7 @@ export async function createPaginatedMessage(
|
|||
): Promise<Message> {
|
||||
const fullOpts = { ...defaultOpts, ...opts } as PaginateMessageOpts;
|
||||
const firstPageContent = await loadPageFn(1);
|
||||
const message = await channel.send(firstPageContent);
|
||||
const message = await channel.send({ content: firstPageContent });
|
||||
|
||||
let page = 1;
|
||||
let pageLoadId = 0; // Used to avoid race conditions when rapidly switching pages
|
||||
|
|
|
@ -1,11 +1,14 @@
|
|||
import { PermissionOverwrites, Permissions } from "discord.js";
|
||||
import { Permissions } from "discord.js";
|
||||
|
||||
/**
|
||||
* @param resolvedPermissions A Permission object from e.g. GuildChannel#permissionsOf() or Member#permission
|
||||
* @param requiredPermissions Bitmask of required permissions
|
||||
*/
|
||||
export function hasDiscordPermissions(resolvedPermissions: PermissionOverwrites, requiredPermissions: number | bigint) {
|
||||
const allowedPermissions = BigInt(resolvedPermissions.allow);
|
||||
export function hasDiscordPermissions(
|
||||
resolvedPermissions: Permissions | Readonly<Permissions>,
|
||||
requiredPermissions: number | bigint,
|
||||
) {
|
||||
const allowedPermissions = BigInt(resolvedPermissions);
|
||||
const nRequiredPermissions = BigInt(requiredPermissions);
|
||||
|
||||
if (Boolean(allowedPermissions & BigInt(Permissions.FLAGS.ADMINISTRATOR))) {
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
import { APIMessage, MessageOptions } from "discord.js";
|
||||
import { MessageOptions } from "discord.js";
|
||||
|
||||
function embedHasContent(embed: any) {
|
||||
for (const [key, value] of Object.entries(embed)) {
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue