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 });