Skip to content

Commit 8bca8c6

Browse files
committed
feat(groups): add native sendGroupStatus method and document text group status support
1 parent dc4645a commit 8bca8c6

3 files changed

Lines changed: 58 additions & 2 deletions

File tree

docs/content/groups.mdx

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -753,6 +753,23 @@ client.on('connect', async () => {
753753
See [Error Handling](/error-handling) for the full error taxonomy and how to distinguish domain
754754
errors from builder and automation errors.
755755

756+
## Posting Group Status (`sendGroupStatus`)
757+
758+
```typescript
759+
client.sendGroupStatus(targetGroupJid: string, content: { text: string; backgroundColor?: number }): Promise<WAMessage>
760+
```
761+
762+
Posts a **Group Status / Group Story update (`groupStatusMessageV2`)** to the specified group.
763+
764+
> ℹ️ **Feature Status:** Currently, **text-based Group Status** (`text`) is fully supported. Image and video status attachments are currently in active development.
765+
766+
```typescript
767+
// Post a text Group Status to a group
768+
await client.sendGroupStatus('120363000000000000@g.us', {
769+
text: '📢 Important Group Announcement!',
770+
})
771+
```
772+
756773
## Complete example
757774

758775
The example below creates a group, promotes a member to admin, locks editing to admins, and prints

src/client/client.ts

Lines changed: 38 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,14 @@
11
import makeWASocket, {
22
fetchLatestBaileysVersion,
3+
generateWAMessageContent,
4+
generateWAMessageFromContent,
35
initAuthCreds,
46
type AuthenticationCreds,
57
type UserFacingSocketConfig,
68
type WAMessage,
79
type WAMessageKey,
810
} from 'baileys'
11+
import crypto from 'node:crypto'
912
import {
1013
deleteMessage,
1114
EditBuilder,
@@ -721,8 +724,8 @@ export class Client extends TypedEventEmitter<ClientEventMap> {
721724
logger: this.logger,
722725
onText: (handler) => {
723726
const wrapped = (msg: MessageContext): void => handler(msg)
724-
this.on('text', wrapped)
725-
return () => this.off('text', wrapped)
727+
this.on('message', wrapped)
728+
return () => this.off('message', wrapped)
726729
},
727730
buildContext: (resolved, msg) => this.buildCommandContext(resolved, msg),
728731
})
@@ -859,6 +862,39 @@ export class Client extends TypedEventEmitter<ClientEventMap> {
859862
await socket.sendMessage(recipient, { disappearingMessagesInChat: seconds } as never)
860863
}
861864

865+
async sendGroupStatus(targetJid: string, content: Record<string, unknown>): Promise<WAMessage> {
866+
this.assertWebProvider('sendGroupStatus')
867+
const socket = this.requireSocket() as any
868+
const backgroundColor = content['backgroundColor']
869+
const cleanContent: Record<string, unknown> = { ...content }
870+
delete cleanContent['backgroundColor']
871+
872+
const opts: any = {
873+
upload: socket.waUploadToServer.bind(socket),
874+
}
875+
if (backgroundColor != null) {
876+
opts.backgroundColor = backgroundColor
877+
}
878+
879+
const inside = await generateWAMessageContent(cleanContent as any, opts)
880+
881+
const messageSecret = crypto.randomBytes(32)
882+
883+
const msg = generateWAMessageFromContent(
884+
targetJid,
885+
{
886+
messageContextInfo: { messageSecret },
887+
groupStatusMessageV2: {
888+
message: Object.assign({}, inside, { messageContextInfo: { messageSecret } }),
889+
},
890+
},
891+
{ userJid: socket.user?.id || targetJid }
892+
)
893+
894+
await socket.relayMessage(targetJid, msg.message, { messageId: msg.key.id })
895+
return msg
896+
}
897+
862898
private resolveRecipient(to: string): Promise<string> {
863899
return resolveUsername(this.requireSocket() as unknown as UsernameResolveSocketLike, to, this.usernameCache)
864900
}

src/events/decoders/messages.ts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -81,6 +81,9 @@ const WRAPPER_FIELDS = [
8181
'documentWithCaptionMessage',
8282
'editedMessage',
8383
'lottieStickerMessage',
84+
'groupStatusMessageV2',
85+
'groupStatusMessage',
86+
'groupStatusMentionMessage',
8487
] as const
8588

8689
const unwrap = (content: Record<string, unknown>): Record<string, unknown> => {

0 commit comments

Comments
 (0)