Skip to content

Commit 12a8abf

Browse files
committed
feat: bug fixes and improvements
1 parent 12411da commit 12a8abf

7 files changed

Lines changed: 57 additions & 46 deletions

File tree

src/commands/everyone.ts

Lines changed: 34 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
1-
import { GroupChat } from "whatsapp-web.js";
2-
import { Message } from "../types/message"
1+
import { GroupChat, MessageMedia } from "whatsapp-web.js";
2+
import { Message } from "../types/message";
33
import log from "../components/utils/log";
44
import sleep from "../components/utils/sleep";
55
import { helloMessage } from "../components/utils/data";
@@ -29,7 +29,7 @@ export default async function (msg: Message): Promise<void> {
2929
const groupChat = chat as GroupChat;
3030
const participants = groupChat.participants;
3131

32-
const self = (await client()).info.wid._serialized
32+
const self = (await client()).info.wid._serialized;
3333
const filteredParticipants = participants.filter((p) => {
3434
if (p.id._serialized === self) return false;
3535
if (onlyAdmins && !p.isAdmin && !p.isSuperAdmin) return false;
@@ -47,8 +47,29 @@ export default async function (msg: Message): Promise<void> {
4747

4848
const mentions = filteredParticipants.map((p) => p.id._serialized);
4949
const total = mentions.length;
50-
const baseText =
51-
helloMessage[Math.floor(Math.random() * helloMessage.length)];
50+
51+
const [baseText, media] = await Promise.all([
52+
(async () => {
53+
const defaultMessage =
54+
helloMessage[Math.floor(Math.random() * helloMessage.length)];
55+
if (!msg.hasQuotedMsg) return defaultMessage;
56+
57+
const qoutedMessage = await msg.getQuotedMessage();
58+
return qoutedMessage.body ? qoutedMessage.body : defaultMessage;
59+
})(),
60+
(async () => {
61+
if (msg.hasMedia) return await msg.downloadMedia();
62+
})(),
63+
]);
64+
65+
if (media && (["sticker", "ptt"].includes(msg.type) || msg.isGif)) {
66+
await msg.reply(media);
67+
}
68+
69+
const mediaShouldBeSend = !(
70+
["sticker", "ptt"].includes(msg.type) && msg.isGif
71+
);
72+
5273
// i made it per batch to prevent rate limiting and possibly issues
5374
const batchSize = 30;
5475

@@ -60,7 +81,14 @@ export default async function (msg: Message): Promise<void> {
6081

6182
const messageText = i === 0 ? `${baseText}\n\n${mentionText}` : mentionText;
6283

63-
await msg.reply(messageText, undefined, { mentions: batchMentions });
84+
await msg.reply(
85+
mediaShouldBeSend ? (media ? media : messageText) : messageText,
86+
undefined,
87+
{
88+
caption: mediaShouldBeSend ? (media ? messageText : "") : "",
89+
mentions: batchMentions,
90+
},
91+
);
6492

6593
const min = 2000;
6694
const max = 6000;

src/commands/lid.ts

Lines changed: 0 additions & 26 deletions
This file was deleted.

src/commands/update.ts

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,7 @@
1-
import { Message } from "../types/message"
1+
import { Message } from "../types/message";
22
import log from "../components/utils/log";
33
import { exec } from "child_process";
44
import util from "util";
5-
import redis from "../components/redis";
65

76
export const info = {
87
command: "update",
@@ -21,7 +20,7 @@ export default async function (msg: Message): Promise<void> {
2120
if (stderr) log.warn("Update", `git pull stderr:\n${stderr}`);
2221

2322
const { stdout: commitInfo } = await execPromise(
24-
'git log -1 --pretty=format:"%h - %s (%an, %ar)"',
23+
'git log -7 --pretty=format:"%h - %s (%an, %ar)"',
2524
);
2625

2726
const text = `

src/components/client.ts

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -92,10 +92,8 @@ function registerEvents(client: Client): void {
9292
client.on("message_create", (msg: Message) => {
9393
CheckSpamLink(msg);
9494
messageEvent(msg, "create");
95+
queue.add(() => DownloadMedia(msg))
9596
});
96-
client.on("media_uploaded", (msg: Message) =>
97-
queue.add(() => DownloadMedia(msg)),
98-
);
9997

10098
client.on(
10199
"message_edit",

src/components/events/message.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,10 @@ export default async function (msg: Message, type: string): Promise<void> {
3333
if (!msg.body) return;
3434
if (msg.timestamp < Date.now() / 1000 - 60 && type === "create") return;
3535
if (msg.isGif || msg.isStatus || msg.broadcast || msg.isForwarded) return; // ignore them all
36+
37+
// ignore @Meta AI and others
38+
if (msg.author && msg.author.split("@")[1] === "bot") return;
39+
3640
const lid: string = msg.author
3741
? msg.author.split("@")[0]
3842
: msg.from.split("@")[0];

src/components/events/reaction.ts

Lines changed: 9 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ import { Client, Reaction } from "whatsapp-web.js";
22
import log from "../utils/log";
33
import sleep from "../utils/sleep";
44
import { getSetting } from "../services/settings";
5-
import { rateLimiter } from "../utils/rateLimiter";
5+
import { penalizeUser, rateLimiter } from "../utils/rateLimiter";
66
import { getBlockUser } from "../services/user";
77
import * as Sentry from "@sentry/node";
88
import redis from "../redis";
@@ -14,6 +14,9 @@ export default async function (client: Client, react: Reaction): Promise<void> {
1414
// ignore react if it is older than 60 seconds
1515
if (react.timestamp < Date.now() / 1000 - 60) return;
1616

17+
// ignore @Meta AI and others
18+
if (react.senderId.split("@")[1] === "bot") return;
19+
1720
const key = `react:${react.id.id}`;
1821
const alreadyReacted = await redis.get(key);
1922
if (alreadyReacted) return;
@@ -28,14 +31,12 @@ export default async function (client: Client, react: Reaction): Promise<void> {
2831
getSetting("react_repeater"),
2932
]);
3033

31-
if (
32-
isBlockedUser ||
33-
isRateLimit.status ||
34-
isRateLimit.value.timestamps.length > 5 ||
35-
!isMustRepeatReact ||
36-
isMustRepeatReact == "off"
37-
)
34+
if (isRateLimit.status || isRateLimit.value.timestamps.length > 5) {
35+
await penalizeUser(senderId, isRateLimit.value);
3836
return;
37+
}
38+
39+
if (isBlockedUser || !isMustRepeatReact || isMustRepeatReact == "off") return;
3940

4041
try {
4142
const message = await client.getMessageById(react.msgId._serialized);

src/components/events/revoke.ts

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,13 @@ export default async function (
4646
: null;
4747

4848
log.info("RevokeMessage", lid);
49+
50+
// cant include captions under this certain messages
51+
// so caption will be send first before the deleted message
52+
if (["sticker", "ptt"].includes(msg.type) || msg.isGif) {
53+
await msg.reply(caption);
54+
}
55+
4956
await Promise.all([
5057
addMessage(lid, revoked_msg.body, "revoke"),
5158
msg.reply(media || caption, undefined, {

0 commit comments

Comments
 (0)