Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

ERR StarterBot TypeError: The "listener" argument must be of type function. Received undefined #227

Open
JustinKyo opened this issue Nov 15, 2021 · 9 comments
Labels

Comments

@JustinKyo
Copy link

Today, I ran the demo wechaty-getting-started with the default configuration, it was successful

But when I ran the demo with the latest versions of [email protected] and [email protected]

npm run start:wechat:padlocal

there is a bug report

21:33:56 VERB user/mixins/wechatify wechatifyUserClass(DelayImpl)(Wechaty#596d451d-a87b-4367-ad3d-340f4817231f<>(ding-dong-bot))
21:33:56 VERB user/mixins/wechatify wechatifyUserClass(TagImpl)
21:33:56 VERB user/mixins/wechatify wechatifyUserClass(TagImpl)(Wechaty#596d451d-a87b-4367-ad3d-340f4817231f<>(ding-dong-bot))
21:33:56 VERB user/mixins/wechatify wechatifyUserClass(UrlLinkImpl)
21:33:56 VERB user/mixins/wechatify wechatifyUserClass(UrlLinkImpl)(Wechaty#596d451d-a87b-4367-ad3d-340f4817231f<>(ding-dong-bot))
21:33:56 VERB user/mixins/wechatify wechatifyUserClass(LocationImpl)
21:33:56 VERB user/mixins/wechatify wechatifyUserClass(LocationImpl)(Wechaty#596d451d-a87b-4367-ad3d-340f4817231f<>(ding-dong-bot))
21:33:56 ERR StarterBot TypeError: The "listener" argument must be of type function. Received undefined
ubuntu@VM-24-16-ubuntu:/data/app/wechaty-getting-started$ 
@huan
Copy link
Member

huan commented Nov 15, 2021

The PadLocal currently (v0.4) has not been adapted to Wechaty v1.x API yet.

Please use Wechaty v0.x branch at https://github.com/wechaty/getting-started/blob/v0.x/package.json

Link to:

@huan huan transferred this issue from wechaty/wechaty Nov 15, 2021
@paulhybryant
Copy link

I have the following npm packages installed, but still have the same error:

Output from npm list

[email protected] /root/gitrepo/wechaty-puppet-padlocal-demo
├── [email protected]
├── [email protected]
├── [email protected]
├── [email protected]
└── [email protected]

@huan huan pinned this issue Dec 19, 2021
@huan
Copy link
Member

huan commented Dec 19, 2021

Workaround: use [email protected]

$ [email protected]:wechaty/getting-started.git
$ cd getting-started
$ git checkout v0.x
$ npm install
$ npm start

Details

I have just confirmed that the [email protected] can work with PadLocal without any problem:

$ git remote -v
origin  [email protected]:wechaty/wechaty-getting-started.git (fetch)
origin  [email protected]:wechaty/wechaty-getting-started.git (push)

$ git checkout v0.x
Switched to branch 'v0.x'
Your branch is up to date with 'origin/v0.x'.

$ rm -fr node_modules/  && npm install
added 1168 packages, and audited 1330 packages in 2m

$ npm ls wechaty-puppet-padlocal
[email protected] /home/huan/git/wechaty/getting-started
└── [email protected]

$ WECHATY_PUPPET=wechaty-puppet-padlocal WECHATY_PUPPET_PADLOCAL_TOKEN=puppet_padlocal_XXX npm start

> [email protected] start
> cross-env NODE_OPTIONS="--no-warnings --loader=ts-node/esm" node examples/ding-dong-bot.ts

14:57:56 VERB Puppet constructor({}) #0
14:57:56 VERB StateSwitch constructor(PuppetPadlocal, "{"log":{"enableTimestamp":true,"logLevel":4,"prefixFilter":{}}}")
14:57:56 VERB MemoryCard constructor(undefined)
14:57:56 VERB MemoryCard getStorage() for storage type: N/A
14:57:56 VERB MemoryCard load() from storage: N/A
14:57:56 VERB MemoryCard load() no storage
14:57:56 VERB Puppet constructor() watchdog timeout set to 60 seconds
14:57:56 VERB Puppet setMemory()
14:57:56 VERB StateSwitch <PuppetPadlocal> on(pending) <- (false)
14:57:57 INFO 
      ============================================================
       Welcome to Wechaty PadLocal puppet!

       - wechaty-puppet-padlocal version: 0.47.8
       - padlocal-ts-client version: 0.4.1
      ============================================================
     
14:57:57 INFO StarterBot Starter Bot Started.
14:57:58 INFO [PuppetPadlocal] start login with type: QrLogin
14:57:59 INFO StarterBot onScan: Waiting(2) - https://wechaty.js.org/qrcode/http%3A%2F%2Fweixin.qq.com%2Fx%2F4cRgClPKg7ZLeyWUDs0H
▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
█ ▄▄▄▄▄ ██▄▄ ▀███▀▀▄█▄█ ▄▄▄▄▄ █
█ █   █ █▀▄  ██▄▄ ▀▀▀██ █   █ █
█ █▄▄▄█ █▄▀ █▄▀ █▄██▄ █ █▄▄▄█ █
█▄▄▄▄▄▄▄█▄▀▄█ █ █ █ ▀ █▄▄▄▄▄▄▄█
█  ▀█▀▄▄ ▀▄ █▄█▄██▄▀ ▀██▀ ▄▀▀██
█▄ █▄▀ ▄█▀▄▀ ▄█  █▄▄█ █ ▄▄█████
█ ▀ ▄▄ ▄▀▀  █▀▄██▀▄█▀ ▄  ▀█▀▀ █
█▄▄▀▄  ▄▄▀▄▀█▀█  ▄▄ ▀▄█▄█▄█ █▀█
█    ██▄ ▄█▀█▄▄  ▄▄▀ ▀▀▀ ▀▀ ▀▀█
█ ▄ ▀█ ▄  ██▀▄█  ▀██ █ ▄█▄███▄█
█▄█▄██▄▄▄▀▀▀▄▀▄█ ██▀█ ▄▄▄ ▀▄▄▄█
█ ▄▄▄▄▄ █ ▄▀█▀██ ▄▄▄  █▄█  ▄▀▀█
█ █   █ ███▄▄▄ ██ ▀▀▄  ▄▄▄▀█▄▀█
█ █▄▄▄█ █▀   ▄█▀▄▀█▀▄▄█     ▄▀█
█▄▄▄▄▄▄▄█▄▄▄▄▄██▄▄██████▄▄█▄███

^C14:58:00 VERB StateSwitch <PuppetPadlocal> off(pending) <- (false)
14:58:00 WARN [PuppetPadlocal] stop() is called on a OFF puppet. await ready(off) and return.
14:58:00 VERB StateSwitch <PuppetPadlocal> ready(off, noCross=false)
14:58:00 VERB StateSwitch <PuppetPadlocal> off(true) <- (pending)

@huan huan added the question label Dec 19, 2021
@haibaiDS
Copy link

和题主相同错误: ERR StarterBot TypeError [ERR_INVALID_ARG_TYPE]: The "listener" argument must be of type function. Received undefined

package.json文件内容如下:
{ "name": "ds_bot", "version": "1.0.0", "type": "module", "description": "", "main": "index.js", "engines": { "node": ">=16", "npm": ">=7" }, "scripts": { "test": "echo \"Error: no test specified\" && exit 1", "start": "node bot.js" }, "author": "", "license": "ISC", "dependencies": { "node-schedule": "^2.1.0", "qrcode-terminal": "^0.12.0", "wechaty": "^0.73.8", "wechaty-puppet-padlocal": "^0.4.2", "wechaty-puppet-wechat": "^1.10.5" } }

Bot,js内容如下:
`import {
Wechaty,
ScanStatus,
log
} from 'wechaty'
import qrcodeTerminal from 'qrcode-terminal'
import * as schedule from 'node-schedule';

//扫码
async function onScan (qrcode, status) {
if (status === ScanStatus.Waiting || status === ScanStatus.Timeout) {
const qrcodeImageUrl = [
'https://wechaty.js.org/qrcode/',
encodeURIComponent(qrcode),
].join('')
log.info('StarterBot', 'onScan: %s(%s) - %s', ScanStatus[status], status, qrcodeImageUrl)

    qrcodeTerminal.generate(qrcode, { small: true })  // show qrcode on console

} else {
    log.info('StarterBot', 'onScan: %s(%s)', ScanStatus[status], status)
}

}

//登录
function onLogin (user) {
log.info('StarterBot', '%s login', user)

const date = new Date()
console.log(`当前容器时间:${date}`);

// 登陆后创建定时任务
initDay();

}

//登出
function onLogout (user) {
schedule.cancelJob('wechat-bot');
log.info('Bot', '%s 退出登录', user)
}

//信息
async function onMessage (msg) {
const contact = msg.talker(); // 发消息人
const content = msg.text().trim(); // 消息内容
const room = msg.room(); // 是否是群消息
const alias = await contact.alias() || contact.name(); // 发消息人备注
const isText = msg.type() === bot.Message.Type.Text; //是否文本文档

if (msg.self() || !isText) {
    return;
}

if(room){
    const roomId = room.id;
    room.roomAlias()

    console.log(`群聊消息: ${roomId}`)
    console.log(`发消息人: ${alias} 消息内容: ${content}`, '群消息');

} else {
    console.log(`发消息人: ${alias} 消息内容: ${content}`, '个人消息');
    //设置备注名
    if (content.substr(0, 7) === 'remakes'){
        let alias = ''
        let rgs = content.match(/(?<=【)(.+?)(?=】)/g);

        if(rgs !== null && typeof rgs === 'object' && rgs.length > 0){
            alias = rgs[0] || ''
        }

        //不为空即设置
        if(alias !== undefined && alias !== ''){
            await contact.alias(alias)
            await msg.say(`你的备注已设置为:${alias}`)
        }
    }

}

}

const bot = new Wechaty({
name: 'ding-dong-bot',

//wechaty-puppet-service    wechaty-puppet-padlocal
puppet: 'wechaty-puppet-padlocal',
puppetOptions: {
  token: 'puppet_padlocal_9fdcdf65d843a8aafa7dd2d7dc5632',
}

})

bot.on('scan', onScan)
bot.on('login', onLogin)
bot.on('logout', onLogout)
bot.on('message', onMessage)

//设置群聊邀请
bot.on('room-invite', async roomInvitation => {
const topic = await roomInvitation.topic() //群聊名
const inviter = await roomInvitation.inviter() //邀请者
const name = inviter.name()
const alias = inviter.alias()

console.log(`加入群聊:${topic},邀请者; ${name},备注:${alias}`)

//加入群聊
// try {
//   await roomInvitation.accept()
// } catch (e) {
//   console.error(e)
// }

})

//有人加入群聊 room 群聊 inviteeList 所有人 inviter 邀请者
bot.on('room-join', async function(room, inviteeList, inviter) {
const topic = await room.topic()
//所有人昵称拼接 inviteeList.map(c => c.name()).join(','),
const inviterName = inviter.name() || inviter.alias()
const name = inviteeList[0] !== undefined ? inviteeList[0].name() : ''

console.log(`欢迎 ${inviterName} 邀请 ${name},加入群聊 ${topic}`)

//await room.say(`welcome to "${topic}"!`, inviteeList[0])

})

// 创建微信定时任务
async function initDay() {
schedule.cancelJob('wechat-bot');

 schedule.scheduleJob('wechat-bot','*/5 * * * * *', async () => {
//   /*console.log('你的贴心小助理开始工作啦!');
//   let logMsg;
//   let contact =
//     (await bot.Contact.find({ name: config.NICKNAME })) ||
//     (await bot.Contact.find({ alias: config.NAME })); // 获取你要发送的联系人
//
//   // after logged in
//   //const roomList = await bot.Room.findAll()                    // 获取机器人的房间列表
//   //const roomList = await bot.Room.findAll({topic: 'wechaty'})  // find all of the rooms with name 'wechaty'
//
//   try {
//     await contact.say(str); // 发送消息
//   } catch (e) {
//     logMsg = e.message;
//   }*/
//   const contact = await bot.Contact.find({alias: 'master'});
//
//   try {
//     if(contact !== undefined){
//       console.log(contact.name() || contact.alias())
//       //await contact.say('定时信息');
//     }
//   } catch (e) {
//     console.log(e, 'error')
//   }
//
   const date = new Date()
   console.log(`定时器记录:${date}`);
 });

}

bot.start()
//.then(() => log.info('StarterBot', 'Starter Bot Started.'))
.catch(e => log.error('StarterBot', e))
// .catch(e => console.log(e, '错误日志!'))`

@huan
Copy link
Member

huan commented Dec 20, 2021

Workaround: use [email protected]

TL;DR:

$ [email protected]:wechaty/getting-started.git
$ cd getting-started
$ git checkout v0.x
$ npm install
$ npm start

@YipZong
Copy link

YipZong commented Jan 7, 2022

According to "黑白毒师" from the group chat.
You can use this workaround for now:
Add
"wechaty-puppet": "^0.47.8",
to
package.json - "dependencies"

I verified locally, it is working now.

@BurgerBurglar
Copy link
Member

to follow up on this: does PadLocal support Wechaty 1.X now?

@YipZong
Copy link

YipZong commented May 26, 2022

It does. There was an update earlier this month.
However, I have tried and it was not stable yet I think (at least if you are using it overseas). I have reverted back to 0.x

@BurgerBurglar
Copy link
Member

I just tried with the "Getting started" repo, and it still says:

ERR StarterBot TypeError: The "listener" argument must be of type function. Received undefined

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

No branches or pull requests

6 participants