User resolving optimizations + debug logging
This commit is contained in:
parent
fffb791a2e
commit
ac7f6e728b
5 changed files with 38 additions and 8 deletions
|
@ -310,15 +310,15 @@ export class SlowmodePlugin extends ZeppelinPlugin<ISlowmodePluginConfig> {
|
|||
const thisMsgLock = await this.locks.acquire(`message-${msg.id}`);
|
||||
if (thisMsgLock.interrupted) return;
|
||||
|
||||
// Check if this channel even *has* a bot-maintained slowmode
|
||||
const channelSlowmode = await this.slowmodes.getChannelSlowmode(channel.id);
|
||||
if (!channelSlowmode) return thisMsgLock.unlock();
|
||||
|
||||
// Make sure this user is affected by the slowmode
|
||||
const member = await this.getMember(msg.user_id);
|
||||
const isAffected = this.hasPermission("is_affected", { channelId: channel.id, userId: msg.user_id, member });
|
||||
if (!isAffected) return thisMsgLock.unlock();
|
||||
|
||||
// Check if this channel even *has* a bot-maintained slowmode
|
||||
const channelSlowmode = await this.slowmodes.getChannelSlowmode(channel.id);
|
||||
if (!channelSlowmode) return thisMsgLock.unlock();
|
||||
|
||||
// Delete any extra messages sent after a slowmode was already applied
|
||||
const userHasSlowmode = await this.slowmodes.userHasSlowmode(channel.id, msg.user_id);
|
||||
if (userHasSlowmode) {
|
||||
|
|
|
@ -203,6 +203,8 @@ export class TagsPlugin extends ZeppelinPlugin<ITagsPluginConfig> {
|
|||
}
|
||||
|
||||
async onMessageCreate(msg: SavedMessage) {
|
||||
if (msg.is_bot) return;
|
||||
|
||||
const member = await this.getMember(msg.user_id);
|
||||
if (!this.hasPermission("can_use", { member, channelId: msg.channel_id })) return;
|
||||
|
||||
|
|
|
@ -470,7 +470,11 @@ export class UtilityPlugin extends ZeppelinPlugin<IUtilityPluginConfig> {
|
|||
@d.permission("can_info")
|
||||
async infoCmd(msg: Message, args: { user?: User | UnknownUser }) {
|
||||
const user = args.user || msg.author;
|
||||
const member = user && (await this.getMember(user.id));
|
||||
|
||||
let member;
|
||||
if (!(user instanceof UnknownUser)) {
|
||||
member = await this.getMember(user.id);
|
||||
}
|
||||
|
||||
const embed: EmbedOptions = {
|
||||
fields: [],
|
||||
|
|
|
@ -1,9 +1,13 @@
|
|||
import { IBasePluginConfig, IPluginOptions, Plugin } from "knub";
|
||||
import { IBasePluginConfig, IPluginOptions, logger, Plugin } from "knub";
|
||||
import { PluginRuntimeError } from "../PluginRuntimeError";
|
||||
import Ajv, { ErrorObject } from "ajv";
|
||||
import { isSnowflake, isUnicodeEmoji, resolveMember, resolveUser, UnknownUser } from "../utils";
|
||||
import { Member, User } from "eris";
|
||||
|
||||
import { performance } from "perf_hooks";
|
||||
|
||||
const SLOW_RESOLVE_THRESHOLD = 1500;
|
||||
|
||||
export class ZeppelinPlugin<TConfig extends {} = IBasePluginConfig> extends Plugin<TConfig> {
|
||||
protected configSchema: any;
|
||||
protected permissionsSchema: any;
|
||||
|
@ -81,10 +85,24 @@ export class ZeppelinPlugin<TConfig extends {} = IBasePluginConfig> extends Plug
|
|||
* Resolves a user from the passed string. The passed string can be a user id, a user mention, a full username (with discrim), etc.
|
||||
*/
|
||||
async resolveUser(userResolvable: string): Promise<User | UnknownUser> {
|
||||
return resolveUser(this.bot, userResolvable);
|
||||
const start = performance.now();
|
||||
const user = await resolveUser(this.bot, userResolvable);
|
||||
const time = performance.now() - start;
|
||||
if (time >= SLOW_RESOLVE_THRESHOLD) {
|
||||
const rounded = Math.round(time);
|
||||
logger.warn(`Slow user resolve (${rounded}ms): ${userResolvable}`);
|
||||
}
|
||||
return user;
|
||||
}
|
||||
|
||||
async getMember(memberResolvable: string): Promise<Member> {
|
||||
return resolveMember(this.bot, this.guild, memberResolvable);
|
||||
const start = performance.now();
|
||||
const member = await resolveMember(this.bot, this.guild, memberResolvable);
|
||||
const time = performance.now() - start;
|
||||
if (time >= SLOW_RESOLVE_THRESHOLD) {
|
||||
const rounded = Math.round(time);
|
||||
logger.warn(`Slow member resolve (${rounded}ms): ${memberResolvable} in ${this.guild.name} (${this.guild.id})`);
|
||||
}
|
||||
return member;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -566,6 +566,9 @@ export async function resolveUser(bot: Client, value: string): Promise<User | Un
|
|||
if (cachedUser) return cachedUser;
|
||||
|
||||
try {
|
||||
logger.info(`Resolving unknown user: ${value} / ${userId}`);
|
||||
console.trace();
|
||||
|
||||
const freshUser = await bot.getRESTUser(userId);
|
||||
bot.users.add(freshUser, bot);
|
||||
return freshUser;
|
||||
|
@ -585,6 +588,9 @@ export async function resolveMember(bot: Client, guild: Guild, value: string): P
|
|||
// If not, fetch it from the API
|
||||
if (!member) {
|
||||
try {
|
||||
logger.info(`Resolving unknown member: ${value}`);
|
||||
console.trace();
|
||||
|
||||
member = await bot.getRESTGuildMember(guild.id, user.id);
|
||||
member.id = user.id;
|
||||
member.guild = guild;
|
||||
|
|
Loading…
Add table
Reference in a new issue