Add proper types to sendErrorMessage()

This commit is contained in:
Dragory 2021-01-17 21:21:18 +02:00
parent 6896afebfa
commit edaeb7ef0e
No known key found for this signature in database
GPG key ID: 5F387BA66DF8AAC1
23 changed files with 123 additions and 78 deletions

View file

@ -143,25 +143,32 @@ export function sendSuccessMessage(
body: string,
): Promise<Message | undefined> {
const emoji = pluginData.fullConfig.success_emoji || undefined;
return channel.createMessage(successMessage(body, emoji)).catch(err => {
logger.warn(
`Failed to send success message to ${channel.id} (${(channel as GuildTextableChannel).guild?.id}): ${err.code} ${
err.message
}`,
);
return undefined;
});
return channel
.createMessage(successMessage(body, emoji)) // Force line break
.catch(err => {
const channelInfo = (channel as GuildTextableChannel).guild
? `${channel.id} (${(channel as GuildTextableChannel).guild.id})`
: `${channel.id}`;
logger.warn(`Failed to send success message to ${channelInfo}): ${err.code} ${err.message}`);
return undefined;
});
}
export function sendErrorMessage(pluginData: AnyPluginData<any>, channel, body) {
export function sendErrorMessage(
pluginData: AnyPluginData<any>,
channel: TextableChannel,
body: string,
): Promise<Message | undefined> {
const emoji = pluginData.fullConfig.error_emoji || undefined;
return channel.createMessage(errorMessage(body, emoji)).catch(err => {
logger.warn(
`Failed to send error message to ${channel.id} (${(channel as GuildTextableChannel).guild?.id}): ${err.code} ${
err.message
}`,
);
});
return channel
.createMessage(errorMessage(body, emoji)) // Force line break
.catch(err => {
const channelInfo = (channel as GuildTextableChannel).guild
? `${channel.id} (${(channel as GuildTextableChannel).guild.id})`
: `${channel.id}`;
logger.warn(`Failed to send error message to ${channelInfo}): ${err.code} ${err.message}`);
return undefined;
});
}
export function getBaseUrl(pluginData: AnyPluginData<any>) {

View file

@ -30,7 +30,8 @@ export const AddCaseCmd = modActionsCmd({
async run({ pluginData, message: msg, args }) {
const user = await resolveUser(pluginData.client, args.user);
if (!user.id) {
return sendErrorMessage(pluginData, msg.channel, `User not found`);
sendErrorMessage(pluginData, msg.channel, `User not found`);
return;
}
// If the user exists as a guild member, make sure we can act on them first

View file

@ -34,7 +34,8 @@ export const BanCmd = modActionsCmd({
async run({ pluginData, message: msg, args }) {
const user = await resolveUser(pluginData.client, args.user);
if (!user.id) {
return sendErrorMessage(pluginData, msg.channel, `User not found`);
sendErrorMessage(pluginData, msg.channel, `User not found`);
return;
}
const memberToBan = await resolveMember(pluginData.client, pluginData.guild, user.id);

View file

@ -37,7 +37,8 @@ export const CasesUserCmd = modActionsCmd({
async run({ pluginData, message: msg, args }) {
const user = await resolveUser(pluginData.client, args.user);
if (!user.id) {
return sendErrorMessage(pluginData, msg.channel, `User not found`);
sendErrorMessage(pluginData, msg.channel, `User not found`);
return;
}
const cases = await pluginData.state.cases.with("notes").getByUserId(user.id);

View file

@ -32,7 +32,8 @@ export const ForcebanCmd = modActionsCmd({
async run({ pluginData, message: msg, args }) {
const user = await resolveUser(pluginData.client, args.user);
if (!user.id) {
return sendErrorMessage(pluginData, msg.channel, `User not found`);
sendErrorMessage(pluginData, msg.channel, `User not found`);
return;
}
// If the user exists as a guild member, make sure we can act on them first

View file

@ -34,7 +34,8 @@ export const ForcemuteCmd = modActionsCmd({
async run({ pluginData, message: msg, args }) {
const user = await resolveUser(pluginData.client, args.user);
if (!user.id) {
return sendErrorMessage(pluginData, msg.channel, `User not found`);
sendErrorMessage(pluginData, msg.channel, `User not found`);
return;
}
const memberToMute = await resolveMember(pluginData.client, pluginData.guild, user.id);

View file

@ -32,7 +32,8 @@ export const ForceUnmuteCmd = modActionsCmd({
async run({ pluginData, message: msg, args }) {
const user = await resolveUser(pluginData.client, args.user);
if (!user.id) {
return sendErrorMessage(pluginData, msg.channel, `User not found`);
sendErrorMessage(pluginData, msg.channel, `User not found`);
return;
}
// Check if they're muted in the first place

View file

@ -44,7 +44,8 @@ export const MuteCmd = modActionsCmd({
async run({ pluginData, message: msg, args }) {
const user = await resolveUser(pluginData.client, args.user);
if (!user.id) {
return sendErrorMessage(pluginData, msg.channel, `User not found`);
sendErrorMessage(pluginData, msg.channel, `User not found`);
return;
}
const memberToMute = await resolveMember(pluginData.client, pluginData.guild, user.id);

View file

@ -21,7 +21,8 @@ export const NoteCmd = modActionsCmd({
async run({ pluginData, message: msg, args }) {
const user = await resolveUser(pluginData.client, args.user);
if (!user.id) {
return sendErrorMessage(pluginData, msg.channel, `User not found`);
sendErrorMessage(pluginData, msg.channel, `User not found`);
return;
}
const userName = `${user.username}#${user.discriminator}`;

View file

@ -29,7 +29,8 @@ export const UnbanCmd = modActionsCmd({
async run({ pluginData, message: msg, args }) {
const user = await resolveUser(pluginData.client, args.user);
if (!user.id) {
return sendErrorMessage(pluginData, msg.channel, `User not found`);
sendErrorMessage(pluginData, msg.channel, `User not found`);
return;
}
// The moderator who did the action is the message author or, if used, the specified -mod

View file

@ -34,7 +34,8 @@ export const UnmuteCmd = modActionsCmd({
async run({ pluginData, message: msg, args }) {
const user = await resolveUser(pluginData.client, args.user);
if (!user.id) {
return sendErrorMessage(pluginData, msg.channel, `User not found`);
sendErrorMessage(pluginData, msg.channel, `User not found`);
return;
}
const memberToUnmute = await resolveMember(pluginData.client, pluginData.guild, user.id);

View file

@ -30,7 +30,8 @@ export const WarnCmd = modActionsCmd({
async run({ pluginData, message: msg, args }) {
const user = await resolveUser(pluginData.client, args.user);
if (!user.id) {
return sendErrorMessage(pluginData, msg.channel, `User not found`);
sendErrorMessage(pluginData, msg.channel, `User not found`);
return;
}
const memberToWarn = await resolveMember(pluginData.client, pluginData.guild, user.id);

View file

@ -25,7 +25,8 @@ export async function actualKickMemberCmd(
) {
const user = await resolveUser(pluginData.client, args.user);
if (!user.id) {
return sendErrorMessage(pluginData, msg.channel, `User not found`);
sendErrorMessage(pluginData, msg.channel, `User not found`);
return;
}
const memberToKick = await resolveMember(pluginData.client, pluginData.guild, user.id);

View file

@ -20,7 +20,8 @@ export const NamesCmd = nameHistoryCmd({
const usernames = await pluginData.state.usernameHistory.getByUserId(args.userId);
if (nicknames.length === 0 && usernames.length === 0) {
return sendErrorMessage(pluginData, msg.channel, "No name history found");
sendErrorMessage(pluginData, msg.channel, "No name history found");
return;
}
const nicknameRows = nicknames.map(

View file

@ -16,7 +16,8 @@ export const ScheduledPostsDeleteCmd = postCmd({
scheduledPosts.sort(sorter("post_at"));
const post = scheduledPosts[args.num - 1];
if (!post) {
return sendErrorMessage(pluginData, msg.channel, "Scheduled post not found");
sendErrorMessage(pluginData, msg.channel, "Scheduled post not found");
return;
}
await pluginData.state.scheduledPosts.delete(post.id);

View file

@ -18,7 +18,8 @@ export const ScheduledPostsShowCmd = postCmd({
scheduledPosts.sort(sorter("post_at"));
const post = scheduledPosts[args.num - 1];
if (!post) {
return sendErrorMessage(pluginData, msg.channel, "Scheduled post not found");
sendErrorMessage(pluginData, msg.channel, "Scheduled post not found");
return;
}
postMessage(pluginData, msg.channel as TextChannel, post.content, post.attachments, post.enable_mentions);

View file

@ -39,14 +39,12 @@ export async function actualPostCmd(
if (opts.repeat) {
if (opts.repeat < MIN_REPEAT_TIME) {
return sendErrorMessage(
pluginData,
msg.channel,
`Minimum time for -repeat is ${humanizeDuration(MIN_REPEAT_TIME)}`,
);
sendErrorMessage(pluginData, msg.channel, `Minimum time for -repeat is ${humanizeDuration(MIN_REPEAT_TIME)}`);
return;
}
if (opts.repeat > MAX_REPEAT_TIME) {
return sendErrorMessage(pluginData, msg.channel, `Max time for -repeat is ${humanizeDuration(MAX_REPEAT_TIME)}`);
sendErrorMessage(pluginData, msg.channel, `Max time for -repeat is ${humanizeDuration(MAX_REPEAT_TIME)}`);
return;
}
}
@ -56,7 +54,8 @@ export async function actualPostCmd(
// Schedule the post to be posted later
postAt = await parseScheduleTime(pluginData, msg.author.id, opts.schedule);
if (!postAt) {
return sendErrorMessage(pluginData, msg.channel, "Invalid schedule time");
sendErrorMessage(pluginData, msg.channel, "Invalid schedule time");
return;
}
} else if (opts.repeat) {
postAt = moment.utc().add(opts.repeat, "ms");
@ -72,35 +71,37 @@ export async function actualPostCmd(
// Invalid time
if (!repeatUntil) {
return sendErrorMessage(pluginData, msg.channel, "Invalid time specified for -repeat-until");
sendErrorMessage(pluginData, msg.channel, "Invalid time specified for -repeat-until");
return;
}
if (repeatUntil.isBefore(moment.utc())) {
return sendErrorMessage(pluginData, msg.channel, "You can't set -repeat-until in the past");
sendErrorMessage(pluginData, msg.channel, "You can't set -repeat-until in the past");
return;
}
if (repeatUntil.isAfter(MAX_REPEAT_UNTIL)) {
return sendErrorMessage(
sendErrorMessage(
pluginData,
msg.channel,
"Unfortunately, -repeat-until can only be at most 100 years into the future. Maybe 99 years would be enough?",
);
return;
}
} else if (opts["repeat-times"]) {
repeatTimes = opts["repeat-times"];
if (repeatTimes <= 0) {
return sendErrorMessage(pluginData, msg.channel, "-repeat-times must be 1 or more");
sendErrorMessage(pluginData, msg.channel, "-repeat-times must be 1 or more");
return;
}
}
if (repeatUntil && repeatTimes) {
return sendErrorMessage(pluginData, msg.channel, "You can only use one of -repeat-until or -repeat-times at once");
sendErrorMessage(pluginData, msg.channel, "You can only use one of -repeat-until or -repeat-times at once");
return;
}
if (opts.repeat && !repeatUntil && !repeatTimes) {
return sendErrorMessage(
pluginData,
msg.channel,
"You must specify -repeat-until or -repeat-times for repeated messages",
);
sendErrorMessage(pluginData, msg.channel, "You must specify -repeat-until or -repeat-times for repeated messages");
return;
}
if (opts.repeat) {
@ -114,7 +115,8 @@ export async function actualPostCmd(
// Save schedule/repeat information in DB
if (postAt) {
if (postAt < moment.utc()) {
return sendErrorMessage(pluginData, msg.channel, "Post can't be scheduled to be posted in the past");
sendErrorMessage(pluginData, msg.channel, "Post can't be scheduled to be posted in the past");
return;
}
await pluginData.state.scheduledPosts.create({

View file

@ -17,17 +17,20 @@ export const AddRoleCmd = rolesCmd({
async run({ message: msg, args, pluginData }) {
if (!canActOn(pluginData, msg.member, args.member, true)) {
return sendErrorMessage(pluginData, msg.channel, "Cannot add roles to this user: insufficient permissions");
sendErrorMessage(pluginData, msg.channel, "Cannot add roles to this user: insufficient permissions");
return;
}
const roleId = await resolveRoleId(pluginData.client, pluginData.guild.id, args.role);
if (!roleId) {
return sendErrorMessage(pluginData, msg.channel, "Invalid role id");
sendErrorMessage(pluginData, msg.channel, "Invalid role id");
return;
}
const config = pluginData.config.getForMessage(msg);
if (!config.assignable_roles.includes(roleId)) {
return sendErrorMessage(pluginData, msg.channel, "You cannot assign that role");
sendErrorMessage(pluginData, msg.channel, "You cannot assign that role");
return;
}
// Sanity check: make sure the role is configured properly
@ -36,11 +39,13 @@ export const AddRoleCmd = rolesCmd({
pluginData.state.logs.log(LogType.BOT_ALERT, {
body: `Unknown role configured for 'roles' plugin: ${roleId}`,
});
return sendErrorMessage(pluginData, msg.channel, "You cannot assign that role");
sendErrorMessage(pluginData, msg.channel, "You cannot assign that role");
return;
}
if (args.member.roles.includes(roleId)) {
return sendErrorMessage(pluginData, msg.channel, "Member already has that role");
sendErrorMessage(pluginData, msg.channel, "Member already has that role");
return;
}
pluginData.state.logs.ignoreLog(LogType.MEMBER_ROLE_ADD, args.member.id);

View file

@ -28,22 +28,25 @@ export const MassAddRoleCmd = rolesCmd({
for (const member of members) {
if (!canActOn(pluginData, msg.member, member, true)) {
return sendErrorMessage(
sendErrorMessage(
pluginData,
msg.channel,
"Cannot add roles to 1 or more specified members: insufficient permissions",
);
return;
}
}
const roleId = await resolveRoleId(pluginData.client, pluginData.guild.id, args.role);
if (!roleId) {
return sendErrorMessage(pluginData, msg.channel, "Invalid role id");
sendErrorMessage(pluginData, msg.channel, "Invalid role id");
return;
}
const config = pluginData.config.getForMessage(msg);
if (!config.assignable_roles.includes(roleId)) {
return sendErrorMessage(pluginData, msg.channel, "You cannot assign that role");
sendErrorMessage(pluginData, msg.channel, "You cannot assign that role");
return;
}
const role = pluginData.guild.roles.get(roleId);
@ -51,7 +54,8 @@ export const MassAddRoleCmd = rolesCmd({
pluginData.state.logs.log(LogType.BOT_ALERT, {
body: `Unknown role configured for 'roles' plugin: ${roleId}`,
});
return sendErrorMessage(pluginData, msg.channel, "You cannot assign that role");
sendErrorMessage(pluginData, msg.channel, "You cannot assign that role");
return;
}
const membersWithoutTheRole = members.filter(m => !m.roles.includes(roleId));

View file

@ -28,22 +28,25 @@ export const MassRemoveRoleCmd = rolesCmd({
for (const member of members) {
if (!canActOn(pluginData, msg.member, member, true)) {
return sendErrorMessage(
sendErrorMessage(
pluginData,
msg.channel,
"Cannot add roles to 1 or more specified members: insufficient permissions",
);
return;
}
}
const roleId = await resolveRoleId(pluginData.client, pluginData.guild.id, args.role);
if (!roleId) {
return sendErrorMessage(pluginData, msg.channel, "Invalid role id");
sendErrorMessage(pluginData, msg.channel, "Invalid role id");
return;
}
const config = pluginData.config.getForMessage(msg);
if (!config.assignable_roles.includes(roleId)) {
return sendErrorMessage(pluginData, msg.channel, "You cannot remove that role");
sendErrorMessage(pluginData, msg.channel, "You cannot remove that role");
return;
}
const role = pluginData.guild.roles.get(roleId);
@ -51,7 +54,8 @@ export const MassRemoveRoleCmd = rolesCmd({
pluginData.state.logs.log(LogType.BOT_ALERT, {
body: `Unknown role configured for 'roles' plugin: ${roleId}`,
});
return sendErrorMessage(pluginData, msg.channel, "You cannot remove that role");
sendErrorMessage(pluginData, msg.channel, "You cannot remove that role");
return;
}
const membersWithTheRole = members.filter(m => m.roles.includes(roleId));

View file

@ -17,17 +17,20 @@ export const RemoveRoleCmd = rolesCmd({
async run({ message: msg, args, pluginData }) {
if (!canActOn(pluginData, msg.member, args.member, true)) {
return sendErrorMessage(pluginData, msg.channel, "Cannot remove roles from this user: insufficient permissions");
sendErrorMessage(pluginData, msg.channel, "Cannot remove roles from this user: insufficient permissions");
return;
}
const roleId = await resolveRoleId(pluginData.client, pluginData.guild.id, args.role);
if (!roleId) {
return sendErrorMessage(pluginData, msg.channel, "Invalid role id");
sendErrorMessage(pluginData, msg.channel, "Invalid role id");
return;
}
const config = pluginData.config.getForMessage(msg);
if (!config.assignable_roles.includes(roleId)) {
return sendErrorMessage(pluginData, msg.channel, "You cannot remove that role");
sendErrorMessage(pluginData, msg.channel, "You cannot remove that role");
return;
}
// Sanity check: make sure the role is configured properly
@ -36,11 +39,13 @@ export const RemoveRoleCmd = rolesCmd({
pluginData.state.logs.log(LogType.BOT_ALERT, {
body: `Unknown role configured for 'roles' plugin: ${roleId}`,
});
return sendErrorMessage(pluginData, msg.channel, "You cannot remove that role");
sendErrorMessage(pluginData, msg.channel, "You cannot remove that role");
return;
}
if (!args.member.roles.includes(roleId)) {
return sendErrorMessage(pluginData, msg.channel, "Member doesn't have that role");
sendErrorMessage(pluginData, msg.channel, "Member doesn't have that role");
return;
}
pluginData.state.logs.ignoreLog(LogType.MEMBER_ROLE_REMOVE, args.member.id);

View file

@ -126,11 +126,8 @@ export const SlowmodeSetCmd = slowmodeCmd({
rateLimitPerUser: rateLimitSeconds,
});
} catch (e) {
return sendErrorMessage(
pluginData,
msg.channel,
`Failed to set native slowmode: ${disableInlineCode(e.message)}`,
);
sendErrorMessage(pluginData, msg.channel, `Failed to set native slowmode: ${disableInlineCode(e.message)}`);
return;
}
} else {
// If there is an existing native slowmode, disable that first

View file

@ -83,18 +83,21 @@ export async function displaySearch(
}
} catch (e) {
if (e instanceof SearchError) {
return sendErrorMessage(pluginData, msg.channel, e.message);
sendErrorMessage(pluginData, msg.channel, e.message);
return;
}
if (e instanceof InvalidRegexError) {
return sendErrorMessage(pluginData, msg.channel, e.message);
sendErrorMessage(pluginData, msg.channel, e.message);
return;
}
throw e;
}
if (searchResult.totalResults === 0) {
return sendErrorMessage(pluginData, msg.channel, "No results found");
sendErrorMessage(pluginData, msg.channel, "No results found");
return;
}
const resultWord = searchResult.totalResults === 1 ? "matching member" : "matching members";
@ -203,18 +206,21 @@ export async function archiveSearch(
}
} catch (e) {
if (e instanceof SearchError) {
return sendErrorMessage(pluginData, msg.channel, e.message);
sendErrorMessage(pluginData, msg.channel, e.message);
return;
}
if (e instanceof InvalidRegexError) {
return sendErrorMessage(pluginData, msg.channel, e.message);
sendErrorMessage(pluginData, msg.channel, e.message);
return;
}
throw e;
}
if (results.totalResults === 0) {
return sendErrorMessage(pluginData, msg.channel, "No results found");
sendErrorMessage(pluginData, msg.channel, "No results found");
return;
}
const resultList = args.ids ? formatSearchResultIdList(results.results) : formatSearchResultList(results.results);