juzibot / wechaty-puppet-macpro

One puppet based on Mac WeChat for Wechaty.
Apache License 2.0
38 stars 10 forks source link

Failed to send mini program to room #61

Closed mrtoorich closed 4 years ago

mrtoorich commented 4 years ago

Important:Please file the issue follow the template, or we won't help you to solve the problem.

0. Report Issue Guide

  1. Please run the following command and check whether the problem has been fixed:
npm install wechaty-puppet-macpro
  1. Please search in the issue first, and make sure your problem had not been reported before

1. Versions

2. Describe the bug

Give a clear and concise description of what the bug is.

The mini program was sent, but the mini program couldn't be opened. When I click the mini program card, the error message 加载小程序信息超时,无法启动 (4,-10005) showed.

3. To Reproduce

This part is very important: if you can not provide any reproduce steps, then the problem will be very hard to be recognized.

Steps to reproduce the behavior:

  1. run 'node bot.js':
const { Wechaty, MiniProgram } = require('wechaty');
const { PuppetMacpro } = require('wechaty-puppet-macpro');
const { generate } = require('qrcode-terminal');

const token = '...';
const name = 'me';

const puppet = new PuppetMacpro({
  token,
});

const bot = new Wechaty({
  puppet,
  name,
});

bot
  .on('scan', (qrcode) => {
    generate(qrcode, {
      small: true,
    })
  })
  .on('login', async (user) => {
    const room = await bot.Room.find({ topic: '微信机器人测试' });
    const payload = new MiniProgram({
      username: 'gh_c01a24972b32',
      appid: 'wx25b44eddc868c0f6',
      title: '安踏官方商城',
    });
    await room.say(payload);
  })
  .start();
  1. Open the '微信机器人测试群' Room
  2. Click the mini program card

4. Expected behavior

Give a clear and concise description of what you expected to happen.

The mini program should be opened.

5. Actual behavior

If applicable, add screenshots to help explain your problem. But do not paste log screenshots here.

A error showed, with message '加载小程序信息超时,无法启动 (4,-10005)'.

image

6. Full Output Logs

Set env WECHATY_LOG=silly in order to set log level to silly, then we can get the full log (If you dosen't set log env, log level is info as default, we cannot get the full log)

We need full log instead of log screenshot or log fragments!

Show Logs ```shell $ WECHATY_LOG=silly node yourbot.js Question: Paste your FULL(DO NOT ONLY PROVIDE FRAGMENTS) log messages Answer: 23:53:02 SILL Config WECHATY_LOG set level to silly 23:53:02 INFO Config registering process.on("unhandledRejection") for development/debug 23:53:02 VERB Config constructor() 23:53:04 VERB Puppet constructor({"token":"puppet_macpro_04ba0ca66f731f48"}) #0 23:53:04 VERB StateSwitch constructor(name=PuppetMacpro) 23:53:04 VERB MemoryCard constructor(undefined) 23:53:04 VERB MemoryCard getStorage() for storage type: N/A 23:53:04 VERB MemoryCard load() from storage: N/A 23:53:04 VERB MemoryCard load() no storage 23:53:04 VERB Puppet constructor() watchdog timeout set to 60 seconds 23:53:04 VERB HotImport callerResolve(., /Users/huachen/Dev/xiaoke/wechaty-demo/node_modules/_wechaty-puppet@0.20.2@wechaty-puppet/dist/src/puppet.js) 23:53:04 SILL HotImport callerResolve() callsites() file=/Users/huachen/Dev/xiaoke/wechaty-demo/node_modules/_hot-import@0.2.14@hot-import/dist/src/hot-import.js, type=Object 23:53:04 SILL HotImport callerResolve() callsites() file=/Users/huachen/Dev/xiaoke/wechaty-demo/node_modules/_wechaty-puppet@0.20.2@wechaty-puppet/dist/src/puppet.js, type=null 23:53:04 SILL HotImport callerResolve() callsites() file=/Users/huachen/Dev/xiaoke/wechaty-demo/node_modules/_wechaty-puppet-macpro@0.4.0@wechaty-puppet-macpro/dist/src/puppet-macpro.js, type=null 23:53:04 SILL HotImport callerResolve() callerFile=/Users/huachen/Dev/xiaoke/wechaty-demo/node_modules/_wechaty-puppet-macpro@0.4.0@wechaty-puppet-macpro/dist/src/puppet-macpro.js 23:53:04 VERB Puppet constructor() childClassPath=/Users/huachen/Dev/xiaoke/wechaty-demo/node_modules/_wechaty-puppet-macpro@0.4.0@wechaty-puppet-macpro/dist/src 23:53:04 SILL Accessory #0 constructor() 23:53:04 VERB Wechaty contructor() 23:53:04 VERB StateSwitch constructor(name=Wechaty) 23:53:04 VERB StateSwitch constructor(name=WechatyReady) 23:53:04 VERB Wechaty on(scan, function) registered 23:53:04 VERB Wechaty addListenerFunction(scan) 23:53:04 VERB Wechaty on(login, function) registered 23:53:04 VERB Wechaty addListenerFunction(login) 23:53:04 INFO Wechaty ()>(me) start() v0.32.2 is starting... 23:53:04 VERB Wechaty puppet: Puppet#0() 23:53:04 VERB Wechaty name: me 23:53:04 VERB Wechaty id: ck76cvlf40000c6vce16k8qcp 23:53:04 SILL StateSwitch on() is false 23:53:04 SILL StateSwitch off() is true 23:53:04 VERB StateSwitch off(true) <- (true) 23:53:04 SILL StateSwitch on() is false 23:53:04 VERB StateSwitch on(pending) <- (false) 23:53:04 VERB MemoryCard constructor("me") 23:53:04 VERB MemoryCard getStorage() for storage type: N/A 23:53:04 VERB getStorage name: me, options: {"type":"file"} 23:53:04 VERB StorageFile constructor(me, ...) 23:53:04 VERB StorageBackend constructor(me, { type: file }) 23:53:04 VERB MemoryCard load() from storage: StorageFile 23:53:04 VERB StorageFile load() from /Users/huachen/Dev/xiaoke/wechaty-demo/me.memory-card.json 23:53:04 VERB Puppet constructor() memory.load() done 23:53:04 VERB Wechaty initPuppet() Puppet#0() 23:53:04 VERB MemoryCard multiplex(puppet) 23:53:04 VERB MemoryCard static multiplex(MemoryCard, puppet) 23:53:04 VERB MemoryCard constructor({"name":"me","multiplex":{"name":"puppet","parent":{"options":{"name":"me"},"name":"me","payload":{"\rpuppet\nWECHATY_PUPPET_MACPRO":{"taskId":112736,"userName":"leanplay","wxid":"wxid_zuz7datknpyd12"}},"multiplexNameList":[],"storage":{"name":"me","options":{"type":"file"},"absFileName":"/Users/huachen/Dev/xiaoke/wechaty-demo/me.memory-card.json"}}}}) 23:53:04 VERB PuppetManager resolve({puppet: Puppet#0(), puppetOptions: undefined}) 23:53:04 VERB PuppetManager resolveInstance(Puppet#0()) 23:53:04 VERB Puppet setMemory() 23:53:04 VERB Wechaty initPuppetEventBridge(Puppet#0(me)) 23:53:04 VERB Wechaty initPuppetEventBridge() puppet.on(friendship) registered 23:53:04 VERB Wechaty initPuppetEventBridge() puppet.on(login) registered 23:53:04 VERB Wechaty initPuppetEventBridge() puppet.on(logout) registered 23:53:04 VERB Wechaty initPuppetEventBridge() puppet.on(message) registered 23:53:04 VERB Wechaty initPuppetEventBridge() puppet.on(room-invite) registered 23:53:04 VERB Wechaty initPuppetEventBridge() puppet.on(room-join) registered 23:53:04 VERB Wechaty initPuppetEventBridge() puppet.on(room-leave) registered 23:53:04 VERB Wechaty initPuppetEventBridge() puppet.on(room-topic) registered 23:53:04 VERB Wechaty initPuppetEventBridge() puppet.on(scan) registered 23:53:04 VERB Wechaty initPuppetEventBridge() puppet.on(dong) registered 23:53:04 VERB Wechaty initPuppetEventBridge() puppet.on(error) registered 23:53:04 VERB Wechaty initPuppetEventBridge() puppet.on(ready) registered 23:53:04 VERB Wechaty initPuppetEventBridge() puppet.on(reset) registered 23:53:04 VERB Wechaty initPuppetEventBridge() puppet.on(watchdog) registered 23:53:04 VERB Wechaty initAccessory(Puppet#0(me)) 23:53:04 SILL Accessory static set wechaty = "Wechaty#ck76cvlf40000c6vce16k8qcp(me)>(me)" 23:53:04 SILL Accessory static set wechaty = "Wechaty#ck76cvlf40000c6vce16k8qcp(me)>(me)" 23:53:04 SILL Accessory static set wechaty = "Wechaty#ck76cvlf40000c6vce16k8qcp(me)>(me)" 23:53:04 SILL Accessory static set wechaty = "Wechaty#ck76cvlf40000c6vce16k8qcp(me)>(me)" 23:53:04 SILL Accessory static set wechaty = "Wechaty#ck76cvlf40000c6vce16k8qcp(me)>(me)" 23:53:04 SILL Accessory static set wechaty = "Wechaty#ck76cvlf40000c6vce16k8qcp(me)>(me)" 23:53:04 SILL Accessory static set wechaty = "Wechaty#ck76cvlf40000c6vce16k8qcp(me)>(me)" 23:53:04 SILL Accessory static set wechaty = "Wechaty#ck76cvlf40000c6vce16k8qcp(me)>(me)" 23:53:04 SILL Accessory static set puppet = "Puppet#0(me)" 23:53:04 SILL Accessory static set puppet = "Puppet#0(me)" 23:53:04 SILL Accessory static set puppet = "Puppet#0(me)" 23:53:04 SILL Accessory static set puppet = "Puppet#0(me)" 23:53:04 SILL Accessory static set puppet = "Puppet#0(me)" 23:53:04 SILL Accessory static set puppet = "Puppet#0(me)" 23:53:04 SILL Accessory static set puppet = "Puppet#0(me)" 23:53:04 SILL Accessory static set puppet = "Puppet#0(me)" 23:53:04 SILL Accessory set puppet = "Puppet#0(me)" 23:53:04 SILL PuppetMacpro start() 23:53:04 SILL StateSwitch on() is false 23:53:04 VERB StateSwitch on(pending) <- (false) 23:53:04 SILL GrpcGateway notify(getLoginUserInfo, undefined) 23:53:04 VERB GrpcGateway on(heartbeat, function) registered 23:53:04 VERB GrpcGateway on(reconnect, function) registered 23:53:04 VERB GrpcGateway on(scan, function) registered 23:53:04 VERB GrpcGateway on(login, function) registered 23:53:04 VERB GrpcGateway on(logout, function) registered 23:53:04 VERB GrpcGateway on(not-login, function) registered 23:53:04 VERB GrpcGateway on(message, function) registered 23:53:04 VERB GrpcGateway on(contact-list, function) registered 23:53:04 VERB GrpcGateway on(room-list, function) registered 23:53:04 VERB GrpcGateway on(contact-info, function) registered 23:53:04 VERB GrpcGateway on(contact-remark, function) registered 23:53:04 VERB GrpcGateway on(room-info, function) registered 23:53:04 VERB GrpcGateway on(room-join, function) registered 23:53:04 VERB GrpcGateway on(room-member, function) registered 23:53:04 VERB GrpcGateway on(room-qrcode, function) registered 23:53:04 VERB GrpcGateway on(new-friend, function) registered 23:53:04 VERB GrpcGateway on(add-friend, function) registered 23:53:04 VERB GrpcGateway on(del-friend, function) registered 23:53:04 VERB GrpcGateway on(add-friend-before-accept, function) registered 23:53:04 SILL StateSwitch on() is pending 23:53:04 VERB StateSwitch on(true) <- (pending) 23:53:04 VERB Wechaty on(heartbeat, function) registered 23:53:04 VERB Wechaty addListenerFunction(heartbeat) 23:53:04 SILL StateSwitch on() is pending 23:53:04 VERB StateSwitch on(true) <- (pending) 23:53:05 SILL GrpcGateway callback type:【login】 23:53:05 SILL Wechaty memoryCheck() free: 75 MB, require: 4 MB 23:53:05 INFO PuppetMacpro ============================== Login Success ============================== 23:53:05 VERB PuppetMacpro init cache manager 23:53:05 VERB CacheManager init() 23:53:05 VERB CacheManager initCache(leanplay) 23:53:05 VERB CacheManager initCache() inited 3697 Contacts, cachedir="/Users/huachen/.wechaty/puppet-macpro-cache/flash-store-v0.14/leanplay" 23:53:05 VERB Puppet login(wxid_zuz7datknpyd12) 23:53:05 VERB Contact load(wxid_zuz7datknpyd12) init pool 23:53:05 SILL Accessory #1 constructor() 23:53:05 SILL Contact constructor(wxid_zuz7datknpyd12) 23:53:05 SILL Contact ready() @ Puppet#0(me) with id="wxid_zuz7datknpyd12" 23:53:05 SILL Puppet contactPayload(wxid_zuz7datknpyd12) cache MISS 23:53:05 VERB PuppetMacpro contactRawPayload(wxid_zuz7datknpyd12) 23:53:05 VERB MemoryCard set(WECHATY_PUPPET_MACPRO, [object Object]) 23:53:05 VERB MemoryCard save() to StorageFile 23:53:05 VERB StorageFile save() to /Users/huachen/Dev/xiaoke/wechaty-demo/me.memory-card.json 23:53:05 VERB PuppetMacpro contactRawPayloadParser() 23:53:05 SILL Puppet contactPayload(wxid_zuz7datknpyd12) cache SET 23:53:05 VERB Room find({"topic":"小测试"}) 23:53:05 VERB Room findAll({"topic":"小测试"}) 23:53:05 VERB Puppet roomSearch({"topic":"小测试"}) 23:53:05 VERB PuppetMacpro roomList() 23:53:05 VERB MacproContact contactList(leanplay) 23:53:05 SILL RequestClient request() 23:53:05 SILL DedupeApi dedupe() no need to dedupe api getContactList. 23:53:05 SILL Puppet roomSearch() allRoomIdList.length=7 23:53:05 VERB Puppet roomPayload(17888311987@chatroom) 23:53:05 SILL Puppet roomPayloadCache(17888311987@chatroom) cache MISS 23:53:05 VERB PuppetMacpro roomRawPayload(17888311987@chatroom) 23:53:05 VERB Puppet roomPayload(18327999857@chatroom) 23:53:05 SILL Puppet roomPayloadCache(18327999857@chatroom) cache MISS 23:53:05 VERB PuppetMacpro roomRawPayload(18327999857@chatroom) 23:53:05 VERB Puppet roomPayload(19224390384@chatroom) 23:53:05 SILL Puppet roomPayloadCache(19224390384@chatroom) cache MISS 23:53:05 VERB PuppetMacpro roomRawPayload(19224390384@chatroom) 23:53:05 VERB Puppet roomPayload(22230968570@chatroom) 23:53:05 SILL Puppet roomPayloadCache(22230968570@chatroom) cache MISS 23:53:05 VERB PuppetMacpro roomRawPayload(22230968570@chatroom) 23:53:05 VERB Puppet roomPayload(23879667049@chatroom) 23:53:05 SILL Puppet roomPayloadCache(23879667049@chatroom) cache MISS 23:53:05 VERB PuppetMacpro roomRawPayload(23879667049@chatroom) 23:53:05 VERB Puppet roomPayload(24041467944@chatroom) 23:53:05 SILL Puppet roomPayloadCache(24041467944@chatroom) cache MISS 23:53:05 VERB PuppetMacpro roomRawPayload(24041467944@chatroom) 23:53:05 VERB Puppet roomPayload(24113855649@chatroom) 23:53:05 SILL Puppet roomPayloadCache(24113855649@chatroom) cache MISS 23:53:05 VERB PuppetMacpro roomRawPayload(24113855649@chatroom) 23:53:05 VERB PuppetMacpro roomRawPayloadParser() 23:53:05 SILL Puppet roomPayload(17888311987@chatroom) cache SET 23:53:05 VERB PuppetMacpro roomRawPayloadParser() 23:53:05 SILL Puppet roomPayload(18327999857@chatroom) cache SET 23:53:05 VERB PuppetMacpro roomRawPayloadParser() 23:53:05 SILL Puppet roomPayload(19224390384@chatroom) cache SET 23:53:05 VERB PuppetMacpro roomRawPayloadParser() 23:53:05 SILL Puppet roomPayload(22230968570@chatroom) cache SET 23:53:05 VERB PuppetMacpro roomRawPayloadParser() 23:53:05 SILL Puppet roomPayload(23879667049@chatroom) cache SET 23:53:05 VERB PuppetMacpro roomRawPayloadParser() 23:53:05 SILL Puppet roomPayload(24041467944@chatroom) cache SET 23:53:05 VERB PuppetMacpro roomRawPayloadParser() 23:53:05 SILL Puppet roomPayload(24113855649@chatroom) cache SET 23:53:05 VERB Puppet roomQueryFilterFactory({"topic":"小测试"}) 23:53:05 SILL Puppet roomSearch() roomIdList filtered. result length=1 23:53:05 SILL Accessory #2 constructor() 23:53:05 SILL Room constructor(24041467944@chatroom) 23:53:05 VERB Room ready() 23:53:05 VERB Puppet roomPayload(24041467944@chatroom) 23:53:05 VERB PuppetMacpro roomMemberList(24041467944@chatroom) 23:53:05 VERB Contact load(wxid_zuz7datknpyd12) init pool 23:53:05 SILL Accessory #3 constructor() 23:53:05 SILL Contact constructor(wxid_zuz7datknpyd12) 23:53:05 SILL Accessory #4 constructor() 23:53:05 SILL Contact constructor(wxid_7a2oy0w5p5il22) 23:53:05 SILL Accessory #5 constructor() 23:53:05 SILL Contact constructor(wxid_bgor4wj7uz5611) 23:53:05 SILL Contact ready() @ Puppet#0(me) with id="wxid_zuz7datknpyd12" 23:53:05 SILL Contact ready() @ Puppet#0(me) with id="wxid_7a2oy0w5p5il22" 23:53:05 SILL Puppet contactPayload(wxid_7a2oy0w5p5il22) cache MISS 23:53:05 VERB PuppetMacpro contactRawPayload(wxid_7a2oy0w5p5il22) 23:53:05 SILL Contact ready() @ Puppet#0(me) with id="wxid_bgor4wj7uz5611" 23:53:05 SILL Puppet contactPayload(wxid_bgor4wj7uz5611) cache MISS 23:53:05 VERB PuppetMacpro contactRawPayload(wxid_bgor4wj7uz5611) 23:53:05 SILL Puppet roomValidate(24041467944@chatroom) base class just return `true` 23:53:05 VERB Room find() confirm room[#0] with id=24041467944 is valid result, return it. 23:53:05 VERB MiniProgram constructor() 23:53:05 VERB Room say([object Object], ) 23:53:05 VERB PuppetMacpro messageSendMiniProgram() 23:53:05 VERB Puppet selfId() 23:53:05 VERB MacproMessage sendMiniProgram() 23:53:05 SILL RequestClient request() 23:53:05 SILL DedupeApi dedupe() no need to dedupe api sendApp. 23:53:05 VERB PuppetMacpro contactRawPayloadParser() 23:53:05 SILL Puppet contactPayload(wxid_7a2oy0w5p5il22) cache SET 23:53:05 VERB PuppetMacpro contactRawPayloadParser() 23:53:05 SILL Puppet contactPayload(wxid_bgor4wj7uz5611) cache SET 23:53:06 SILL GrpcGateway =============================================================== API Name : getContactList Request data : {"my_account":"leanplay"} Response data : 1 =============================================================== 23:53:06 SILL GrpcGateway callback type:【contact-list】 23:53:06 VERB PuppetMacpro syncContactList() 23:53:06 SILL GrpcGateway =============================================================== API Name : sendApp Request data : {"app_name":"wx25b44eddc868c0f6@app","describe":"","my_account":"wxid_zuz7datknpyd12","page_path":"","thumb_key":"","thumb_url":"","title":"安踏官方商城","to_account":"24041467944@chatroom","type":2} Response data : 1 =============================================================== 23:53:06 SILL MacproMessage sendMiniProgram : {"code":1,"msg":"发送成功"} 23:53:06 SILL GrpcGateway callback type:【contact-list】 23:53:06 VERB PuppetMacpro syncContactList() 23:53:06 SILL GrpcGateway callback type:【contact-list】 23:53:06 VERB PuppetMacpro syncContactList() 23:53:07 SILL GrpcGateway callback type:【contact-list】 23:53:07 VERB PuppetMacpro syncContactList() 23:53:07 SILL GrpcGateway callback type:【contact-list】 23:53:07 VERB PuppetMacpro syncContactList() 23:53:07 SILL GrpcGateway callback type:【contact-list】 23:53:07 VERB PuppetMacpro syncContactList() 23:53:07 SILL GrpcGateway callback type:【contact-list】 23:53:07 VERB PuppetMacpro syncContactList() 23:53:07 SILL GrpcGateway callback type:【contact-list】 23:53:07 VERB PuppetMacpro syncContactList() 23:53:07 SILL GrpcGateway callback type:【contact-list】 23:53:07 VERB PuppetMacpro syncContactList() 23:53:07 SILL GrpcGateway callback type:【contact-list】 23:53:07 VERB PuppetMacpro syncContactList() 23:53:07 SILL GrpcGateway callback type:【contact-list】 23:53:07 VERB PuppetMacpro syncContactList() 23:53:07 SILL GrpcGateway callback type:【contact-list】 23:53:07 VERB PuppetMacpro syncContactList() 23:53:08 SILL GrpcGateway callback type:【contact-list】 23:53:08 VERB PuppetMacpro syncContactList() 23:53:08 SILL GrpcGateway callback type:【contact-list】 23:53:08 VERB PuppetMacpro syncContactList() 23:53:08 SILL GrpcGateway callback type:【contact-list】 23:53:08 VERB PuppetMacpro syncContactList() 23:53:08 SILL GrpcGateway callback type:【contact-list】 23:53:08 VERB PuppetMacpro syncContactList() 23:53:08 SILL GrpcGateway callback type:【contact-list】 23:53:08 VERB PuppetMacpro syncContactList() 23:53:08 SILL GrpcGateway callback type:【contact-list】 23:53:08 VERB PuppetMacpro syncContactList() 23:53:08 SILL GrpcGateway callback type:【contact-list】 23:53:08 VERB PuppetMacpro syncContactList() 23:53:08 SILL GrpcGateway callback type:【contact-list】 23:53:08 VERB PuppetMacpro syncContactList() 23:53:08 SILL GrpcGateway callback type:【contact-list】 23:53:08 VERB PuppetMacpro syncContactList() 23:53:09 SILL GrpcGateway callback type:【contact-list】 23:53:09 VERB PuppetMacpro syncContactList() 23:53:09 SILL GrpcGateway callback type:【contact-list】 23:53:09 VERB PuppetMacpro syncContactList() 23:53:09 SILL GrpcGateway callback type:【contact-list】 23:53:09 VERB PuppetMacpro syncContactList() 23:53:09 SILL GrpcGateway callback type:【contact-list】 23:53:09 VERB PuppetMacpro syncContactList() 23:53:09 SILL GrpcGateway callback type:【contact-list】 23:53:09 VERB PuppetMacpro syncContactList() 23:53:09 SILL GrpcGateway callback type:【contact-list】 23:53:09 VERB PuppetMacpro syncContactList() 23:53:09 SILL GrpcGateway callback type:【contact-list】 23:53:09 VERB PuppetMacpro syncContactList() 23:53:09 SILL GrpcGateway callback type:【contact-list】 23:53:09 VERB PuppetMacpro syncContactList() 23:53:09 VERB PuppetMacpro Contact data loaded. contact length: 2825 ```

7. Additional context

Add any other context about the problem here.

[bug]

su-chang commented 4 years ago

Thanks for your issue, I have found that your params of MiniProgram is not right.

Example

const miniProgram = new MiniProgram({
appid : 'gh_0aa444a25adc',
title : '我正在使用Authing认证身份,你也来试试吧',
pagePath : 'routes/explore.html',
description : '身份管家',
thumbUrl : '30590201000452305002010002041092541302033d0af802040b30feb602045df0c2c5042b777875706c6f61645f31373533353339353230344063686174726f6f6d3131355f313537363035393538390204010400030201000400',
thumbKey : '42f8609e62817ae45cf7d8fefb532e83',
})

If you want to send one MiniProgram message, it's hard to get the params thumbUrl and thumbKey by yourself.

Suggestion Please send the MiniProgram which you want the bot send to the bot firstly, and then you can get the params thumbUrl and thumbKey from the received MinProgram message.

Copy them to your code, and then you could send it successfully.

mrtoorich commented 4 years ago

Awesome! It works! Thank you! ❤️