Files
2021-09-19 02:51:39 +08:00

104 lines
2.2 KiB
JavaScript

import qrTerm from 'qrcode-terminal'
import {
Contact,
log,
Wechaty,
} from 'wechaty'
const welcome = `
=============== Powered by Wechaty ===============
-------- https://github.com/Chatie/wechaty --------
I can list all your contacts with weixn id & name
__________________________________________________
Please wait... I'm trying to login in...
`
console.log(welcome)
const bot = new Wechaty()
bot.on('scan', onScan)
bot.on('login', onLogin)
bot.on('logout', onLogout)
bot.on('error', onError)
bot.start()
.catch(console.error)
function onScan (qrcode, status) {
qrTerm.generate(qrcode, { small: true }) // show qrcode on console
}
function onLogin (user) {
console.log(`${user} login`)
main()
}
function onLogout (user) {
console.log(`${user} logout`)
}
function onError (e) {
console.error(e)
}
/**
* Main Contact Bot
*/
async function main() {
const contactList = await bot.Contact.findAll()
log.info('Bot', '#######################')
log.info('Bot', 'Contact number: %d\n', contactList.length)
/**
* official contacts list
*/
for (let i = 0; i < contactList.length; i++) {
const contact = contactList[i]
if (contact.type() === Contact.Type.Official) {
log.info('Bot', `official ${i}: ${contact}`)
}
}
/**
* personal contact list
*/
for (let i = 0; i < contactList.length; i++) {
const contact = contactList[i]
if (contact.type() === Contact.Type.Personal) {
log.info('Bot', `personal ${i}: ${contact.name()} : ${contact.id}`)
}
}
const MAX = 17
for (let i = 0; i < contactList.length; i++ ) {
const contact = contactList[i]
/**
* Save avatar to file like: "1-name.jpg"
*/
const file = await contact.avatar()
const name = file.name
await file.toFile(name, true)
log.info('Bot', 'Contact: "%s" with avatar file: "%s"',
contact.name(),
name,
)
if (i > MAX) {
log.info('Bot', 'Contacts too many, I only show you the first %d ... ', MAX)
break
}
}
const SLEEP = 7
log.info('Bot', 'I will re-dump contact weixin id & names after %d second... ', SLEEP)
setTimeout(main, SLEEP * 1000)
}