1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
|
import type { DiscordEmbed } from "./interfaces.ts";
import type { RedditPost } from "../reddit.ts";
const decodeHtmlEntities = (str: string): string => {
return str
.replace(/&/g, "&")
.replace(/</g, "<")
.replace(/>/g, ">")
.replace(/"/g, '"')
.replace(/'/g, "'")
.replace(///g, "/")
.replace(/`/g, "`")
.replace(/=/g, "=");
};
export const createPostEmbed = (post: RedditPost): DiscordEmbed => {
const mediaUrl =
post.media?.reddit_video?.fallback_url ||
post.secure_media?.reddit_video?.fallback_url ||
post.url;
let description = post.selftext || "";
if (description.length > 1000)
description = description.substring(0, 997).trim() + " ...";
const embed: DiscordEmbed = {
title: post.title,
description: description,
url: `https://reddit.com${post.permalink}`,
color: 0xff4500,
author: {
name: `u/${post.author}`,
url: `https://reddit.com/u/${post.author}`,
},
fields: [
{
name: "Score",
value: `${post.score} ⬆️`,
inline: true,
},
{
name: "Comments",
value: `${post.num_comments} 💬`,
inline: true,
},
],
timestamp: new Date(post.created_utc * 1000).toISOString(),
footer: {
text: "r/okbuddyumamusume",
},
};
if (mediaUrl)
if (post.media?.reddit_video || post.secure_media?.reddit_video) {
if (!description) description = "";
description +=
"\n\n📹 **This post contains a video** - [Click here to view](" +
mediaUrl +
")";
embed.description = description;
if (post.preview?.images?.[0]?.source?.url) {
const decodedURL = decodeHtmlEntities(
post.preview.images[0].source.url,
);
console.log("Using preview image:", decodedURL);
embed.image = { url: decodedURL };
} else if (
post.thumbnail &&
post.thumbnail !== "self" &&
post.thumbnail !== "default"
) {
const decodedThumbnail = decodeHtmlEntities(post.thumbnail);
console.log("Using thumbnail:", decodedThumbnail);
embed.image = { url: decodedThumbnail };
} else {
console.log("No suitable thumbnail found for video post");
}
} else {
embed.image = { url: mediaUrl };
}
return embed;
};
export const createComplaintEmbed = (
complaintContent: string,
complainant: { username: string; id: string; avatar?: string },
timestamp: number,
isDM: boolean = true,
): DiscordEmbed => {
return {
title: "🚨 New Complaint",
description: complaintContent,
color: 0xff6b6b,
fields: [
{
name: "Complainant",
value: `${complainant.username} (${complainant.id})`,
inline: true,
},
{
name: "Timestamp",
value: `<t:${Math.floor(timestamp / 1000)}:F>`,
inline: true,
},
],
thumbnail: complainant.avatar
? {
url: `https://cdn.discordapp.com/avatars/${complainant.id}/${complainant.avatar}.png?size=256`,
}
: undefined,
footer: {
text: isDM
? "Complaint submitted via DM"
: "Complaint submitted from server",
},
};
};
|