/ clis / facebook / join-group.js
join-group.js
 1  import { cli } from '@jackwener/opencli/registry';
 2  cli({
 3      site: 'facebook',
 4      name: 'join-group',
 5      description: 'Join a Facebook group',
 6      domain: 'www.facebook.com',
 7      args: [
 8          {
 9              name: 'group',
10              required: true,
11              positional: true,
12              help: `Group ID or URL path (e.g. '1876150192925481' or group name)`,
13          },
14      ],
15      columns: ['status', 'group'],
16      pipeline: [
17          { navigate: { url: 'https://www.facebook.com/groups/${{ args.group }}', settleMs: 3000 } },
18          { evaluate: `(async () => {
19    const group = \${{ args.group | json }};
20    const groupName = document.querySelector('h1')?.textContent?.trim() || group;
21  
22    // Find "Join Group" button
23    const buttons = Array.from(document.querySelectorAll('[role="button"]'));
24    const joinBtn = buttons.find(b => {
25      const text = b.textContent.trim();
26      return text === '加入小组' || text === 'Join group' || text === 'Join Group';
27    });
28  
29    if (!joinBtn) {
30      const isMember = buttons.some(b => {
31        const t = b.textContent.trim();
32        return t === '已加入' || t === 'Joined' || t === '成员' || t === 'Member';
33      });
34      if (isMember) return [{ status: 'Already a member', group: groupName }];
35      return [{ status: 'Join button not found', group: groupName }];
36    }
37  
38    joinBtn.click();
39    await new Promise(r => setTimeout(r, 1500));
40    return [{ status: 'Join request sent', group: groupName }];
41  })()
42  ` },
43      ],
44  });