Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
17 changes: 17 additions & 0 deletions src/features/commands.ts
Original file line number Diff line number Diff line change
Expand Up @@ -73,6 +73,23 @@ const commandsList: Command[] = [
});
},
},
{
words: [`!crosspost`],
help: `provides a no cross-post message`,
category: "Communication",
handleMessage: (msg) => {
msg.channel.send({
embeds: [
{
title: "Please Avoid Cross-Posting",
type: EmbedType.Rich,
description: `Just a friendly reminder to please avoid posting the same message in multiple channels. Pick the one that best fits your question and give folks a bit of time to respond. If you haven’t heard back after a while, feel free to bump your message.`,
color: EMBED_COLOR,
},
],
});
},
},
{
words: [`!promotion`],
help: `informs user's of self-promotion guidelines`,
Expand Down
5 changes: 5 additions & 0 deletions src/features/jobs-moderation/job-mod-helpers.ts
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,7 @@ import {
PostFailures,
PostType,
PostFailureLinkRequired,
PostFailureInsecureLinks,
CircumventedRules,
} from "../../types/jobs-moderation.js";

Expand All @@ -54,6 +55,10 @@ export const failedTooLong = (e: PostFailures): e is PostFailureTooLong =>
export const failedLinkRequired = (
e: PostFailures,
): e is PostFailureLinkRequired => e.type === POST_FAILURE_REASONS.linkRequired;
export const failedInsecureLinks = (
e: PostFailures,
): e is PostFailureInsecureLinks =>
e.type === POST_FAILURE_REASONS.insecureLinks;
export const failedTooManyLines = (
e: PostFailures,
): e is PostFailureTooManyLines => e.type === POST_FAILURE_REASONS.tooManyLines;
Expand Down
11 changes: 11 additions & 0 deletions src/features/jobs-moderation/validate.ts
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@ const validate = (posts: ReturnType<typeof parseContent>, message: Message) => {
errors.push(...participation(posts, message));
errors.push(...formatting(posts, message));
errors.push(...links(posts, message));
errors.push(...insecureLinks(posts, message));
return errors;
};
export default validate;
Expand Down Expand Up @@ -113,3 +114,13 @@ export const links: JobPostValidator<false> = (posts) => {

return errors;
};
const insecureUrlRegex = /\bhttp:\/\/[^\s"'<>]+/gi;
export const insecureLinks: JobPostValidator = (posts, message) => {
const insecureUrls = message.content.match(insecureUrlRegex);
const errors: PostFailures[] = [];
if (!insecureUrls) return errors;

errors.push({ type: POST_FAILURE_REASONS.insecureLinks });

return errors;
};
6 changes: 6 additions & 0 deletions src/features/jobs-moderation/validation-messages.ts
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@ import {
failedTooLong,
failedTooManyGaps,
failedLinkRequired,
failedInsecureLinks,
} from "./job-mod-helpers.js";

const ValidationMessages = {
Expand All @@ -30,6 +31,8 @@ const ValidationMessages = {
[POST_FAILURE_REASONS.tooLong]: (e: PostFailureTooLong) =>
`Your post is too long, please shorten it by ${e.overage} characters.`,
[POST_FAILURE_REASONS.linkRequired]: `Hiring posts must include a link, either to the company website or a page to apply for the job. Make sure it includes \`https://\` so Discord makes it clickable.`,
[POST_FAILURE_REASONS.insecureLinks]:
"Your post contains insecure links (http://). Please use secure links (https://) instead.",
[POST_FAILURE_REASONS.tooManyLines]: (e: PostFailureTooManyLines) =>
`Your post has too many lines, please shorten it by ${e.overage} lines.`,
[POST_FAILURE_REASONS.tooManyGaps]:
Expand All @@ -41,6 +44,9 @@ const ValidationMessages = {
};

export const getValidationMessage = (reason: PostFailures): string => {
if (failedInsecureLinks(reason)) {
return ValidationMessages[reason.type];
}
if (failedCircumventedRules(reason)) {
return ValidationMessages[reason.type](reason);
}
Expand Down
7 changes: 6 additions & 1 deletion src/types/jobs-moderation.ts
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,7 @@ export const enum POST_FAILURE_REASONS {
tooFrequent = "tooFrequent",
replyOrMention = "replyOrMention",
circumventedRules = "circumventedRules",
insecureLinks = "insecureLinks",
// invalidContact = 'invalidContact',
// unknownLocation = 'unknownLocation',
// invalidPostType = 'invalidPostType',
Expand Down Expand Up @@ -68,6 +69,9 @@ export interface PostFailureTooFrequent {
export interface PostFailureReplyOrMention {
type: POST_FAILURE_REASONS.replyOrMention;
}
export interface PostFailureInsecureLinks {
type: POST_FAILURE_REASONS.insecureLinks;
}
export type PostFailures =
| CircumventedRules
| PostFailureMissingType
Expand All @@ -78,4 +82,5 @@ export type PostFailures =
| PostFailureTooLong
| PostFailureTooManyLines
| PostFailureTooManyGaps
| PostFailureTooManyEmojis;
| PostFailureTooManyEmojis
| PostFailureInsecureLinks;