Detalhes do pacote

aijinkela-wechaty

wechaty317Apache-2.01.20.2

Wechaty is a RPA SDK for Chatbot Makers.

ai, bot, chatbot, chatie

readme (leia-me)

Wechaty NPM Version NPM Docker

Wechaty

Downloads GitHub stars Docker Pulls ES Modules

TypeScript JavaScript Python Go Java .NET PHP Rust Scala

WeChat Whatsapp

Gitter Gitter room Telegram Wechaty Channel

Connecting Chatbots

Wechaty is a RPA (Robotic Process Automation) SDK for Chatbot Makers which can help you create a bot in 6 lines of JavaScript, Python, Go, and Java, with cross-platform support including Linux, Windows, MacOS, and Docker.

:spider_web: https://wechaty.js.org
:octocat: https://github.com/Wechaty/wechaty
:beetle: https://github.com/Wechaty/wechaty/issues
:book: https://github.com/Wechaty/wechaty-getting-started
:whale: https://hub.docker.com/r/wechaty/wechaty

Breaking News

Voice of Developers

"Wechaty is a great solution, I believe there would be much more users recognize it." link
@Gcaufy, Tencent Engineer, Author of WePY

"太好用,好用的想哭"
@xinbenlv, Google Engineer, Founder of HaoShiYou.org

”好用到哭“——你们对得起这个评价! link
@bigbrother666sh, creator of《社长不见了》剧本杀 NPC DM

"最好的微信开发库" link
@Jarvis, Baidu Engineer

"Wechaty让运营人员更多的时间思考如何进行活动策划、留存用户,商业变现" link
@lijiarui, Founder & CEO of Juzi.BOT.

"If you know js ... try Wechaty, it's easy to use."
@Urinx Uri Lee, Author of WeixinBot(Python)

"Wechaty is a good project, I hope it can continue! Therefore, I became a contributors in open collective."
@Simple

See more at Wiki:Voice Of Developer

Join Us

Gitter

Wechaty is used in many ChatBot projects by thousands of developers. If you want to talk with other developers, just scan the following QR Code in WeChat with secret code wechaty, join our Wechaty Developers' Home.

Wechaty Friday.BOT QR Code

Scan now, because other Wechaty developers want to talk with you too! (secret code: wechaty)

You are also welcome to join our Gitter channel at https://gitter.im/wechaty/wechaty with your GitHub account!

Resource

Wechaty already held lots of talk and got a lot of blogs in the past 4 years, here is all of the wechaty resources:

:rocket: The World's Shortest ChatBot Code: 6 lines of JavaScript


import { WechatyBuilder } from 'wechaty'

const wechaty = WechatyBuilder.build() // get a Wechaty instance
wechaty
  .on('scan', (qrcode, status) => console.log(`Scan QR Code to login: ${status}\nhttps://wechaty.js.org/qrcode/${encodeURIComponent(qrcode)}`))
  .on('login',            user => console.log(`User ${user} logged in`))
  .on('message',       message => console.log(`Message: ${message}`))
wechaty.start()

Notice: Wechaty requires Node.js version >= 16

This bot can log all messages to the console after login by scan.

You can find Wechaty Official Example at examples/ding-dong-bot.ts, and more from our Example Directory.

:checkered_flag: Requirements

  1. Node.js version 16+
  2. NPM version 7+
  3. TypeScript version 4.4+

Getting Started

node

We have a Wechaty starter repository for beginners with the simplest setting. It will be just work out-of-the-box after you clone & npm install & npm start.

If you are new to Wechaty and want to try it the first time, we'd like to strong recommend you starting from this repository, and using it as your starter template for your project.

Otherwise, please saved the above The World's Shortest ChatBot Code: 6 lines of JavaScript example to a file named bot.js before you can use either NPM or Docker to run it.

1. Npm

NPM Version npm (tag)

Downloads install size

npm init
npm install wechaty

# create your first bot.js file, you can copy/paste from the above "The World's Shortest ChatBot Code: 6 lines of JavaScript"
# then:
node bot.js

2. Docker

Docker Pulls Docker Layers

Wechaty Docker supports both JavaScript and TypeScript. To use TypeScript just write in TypeScript and save with extension name .ts, no need to compile because we use ts-node to run it.

2.1. Run JavaScript

# for JavaScript
docker run -ti --rm --volume="$(pwd)":/bot wechaty/wechaty bot.js

2.2. Run TypeScript

# for TypeScript
docker run -ti --rm --volume="$(pwd)":/bot wechaty/wechaty bot.ts

Learn more about Wechaty Docker at Wiki:Docker.

3. Switch Protocol(Puppet)

Wechaty is very powerful that it can run over different protocols. You can specify the protocol by set the environment variable WECHATY_PUPPET to different puppet provider.

If you cannot use Web protocol, you can apply other protocal following the instruction here: https://github.com/wechaty/wechaty/wiki/Support-Developers We provide free token to support developers build a valuable WeChat chatbot.

Currently we support the following puppet providers :

Protocol Puppet Provider Environment Variable
Web PuppetPuppeteer export WECHATY_PUPPET=wechaty-puppet-puppeteer
Windows PuppetWxwork export WECHATY_PUPPET=wechaty-puppet-service
Mock PuppetMock export WECHATY_PUPPET=wechaty-puppet-mock
Web PuppetWechat4u export WECHATY_PUPPET=wechaty-puppet-wechat4u
iPad PuppetRock export WECHATY_PUPPET=wechaty-puppet-service
iPad PuppetPadLocal export WECHATY_PUPPET=wechaty-puppet-service
Windows PuppetDonut export WECHATY_PUPPET=wechaty-puppet-service
iPad PuppetPadpro DEPRECATED export WECHATY_PUPPET=wechaty-puppet-padpro
iPad PuppetPadchat DEPRECATED export WECHATY_PUPPET=wechaty-puppet-padchat
iPad PuppetPadplus DEPRECATED export WECHATY_PUPPET=wechaty-puppet-padplus
Mac PuppetMacpro DEPRECATED export WECHATY_PUPPET=wechaty-puppet-macpro

Learn more about Wechaty Puppet from the Puppet Wiki:

  1. Puppet Directory: https://github.com/Wechaty/wechaty-puppet/wiki/Directory
  2. Puppet Compatibility: https://github.com/Wechaty/wechaty-puppet/wiki/Compatibility

:guitar: API

Read the Full Documentation at Wechaty Official API Reference

1 Class Wechaty

Main bot class.

A Bot is a Wechaty instance that control a specific wechaty-puppet.

Wechaty API Description
event login emit after bot login full successful
event logout emit after the bot log out
event friendship emit when someone sends bot a friend request
event message emit when there's a new message
event room-join emit when anyone join any room
event room-topic emit when someone change room topic
event room-leave emit when anyone leave the room
event room-invite emit when there is a room invitation
event scan emit when the bot needs to show you a QR Code for scanning
method start(): Promise<void> start the bot
method stop(): Promise<void> stop the bot
method logonoff(): boolean bot login status
method logout(): Promise<void> logout the bot
method currentUser(): ContactSelf get the login-ed bot contact
method say(text: string): Promise<void> let bot say text to itself

2 Class Contact

All wechat contacts(friends/non-friends) will be encapsulated as a Contact.

Contact API Description
static [`find(query: string): Promise<null \ Contact>`](https://wechaty.github.io/wechaty/#Contact.find) find contact by name or alias, if the result more than one, return the first one.
static findAll(query: string): Promise<Contact[]> find contact by name or alias
static load(query: string): Contact get contact by id
property id: readonly string get contact id
method sync(): Promise<void> force reload data for contact , sync data from lowlevel API again
method [`say(text: string): Promise<void \ Message>`](https://wechaty.github.io/wechaty/#Contact+say) send text, Contact, or file to contact, return the message which the bot sent (only puppet-padplus supported).
method self(): boolean check if contact is self
method name(): string get the name from a contact
method alias(): Promise<string> get the alias for a contact
method alias(newAlias: string): Promise<void> set or delete the alias for a contact
method friend(): boolean check if contact is friend
method type(): ContactType return the type of the Contact
method province(): string get the region 'province' from a contact
method city(): string get the region 'city' from a contact
method avatar(): Promise<FileBox> get avatar picture file stream
method gender(): ContactGender get gender from a contact

2.1 Class ContactSelf

Class ContactSelf is extended from Contact.

ContactSelf API Description
method avatar(file: FileBox): Promise<void> set avatar for bot
method qrcode(): Promise<string> get qrcode for bot
method signature(text: string): Promise<void> set signature for bot

2.2 Class Friendship

Send, receive friend request, and friend confirmation events.

Friendship API Description
static add(contact: Contact, hello?: string): Promise<void> send a friend invitation to contact
method accept(): Promise<void> accept Friend Request
method hello(): string get the hello string from a friendship invitation
method contact(): Contact get the contact from friendship
method type(): FriendshipType return the Friendship Type(unknown, confirm, receive, verify)

3 Class Message

All wechat messages will be encapsulated as a Message.

Message API Description
static [`find(query: string): Promise<null \ Message>`](https://wechaty.github.io/wechaty/#Message.find) find message in cache and return the first one
static findAll(query: string): Promise<Message[]> find messages in cache, return a message list
method from(): Contact get the sender from a message
method to(): Contact get the destination of the message
method [`room(): null \ Room`](https://wechaty.github.io/wechaty/#Message+room) get the room from the message.(If the message is not in a room, then will return null)
method text(): string get the text content of the message
method [`say(text: string): Promise<void \ Message>`](https://wechaty.github.io/wechaty/#Message+say) reply a Text, Media File , or contact message to the sender, return the message which the bot sent (only puppet-padplus supported).
method type(): MessageType get the type from the message
method self(): boolean check if a message is sent by self
method mention(): Contact[] get message mentioned contactList.
method mentionSelf(): boolean check if a message is mention self
method forward(to: Contact): Promise<void> Forward the received message
method age(): number the number of seconds since it has been created
method date(): Date the time it was created
method toFileBox(): Promise<FileBox> extract the Media File from the Message, and put it into the FileBox.
method toContact(): Promise<Contact> get Share Card of the Message

4 Class Room

All wechat rooms(groups) will be encapsulated as a Room.

Room API Description
static create(contactList: Contact[], topic?: string): Promise<Room> create a new room
static [`find(query: string): Promise<null \ Room>`](https://wechaty.github.io/wechaty/#Room.find) Try to find a room by filter. If get many, return the first one.
static findAll(query: string): Promise<Room[]> Find all contacts in a room
static load(query: string): Room load room by room id
property id: readonly string
event join emit when anyone join any room
event topic emit when someone change room topic
event leave emit when anyone leave the room
event invite emit when receive a room invitation
method sync(): <Promise<void> force reload data for room, sync data from lowlevel API again.
method [`say(text: string): Promise<void \ Message>`](https://wechaty.github.io/wechaty/#Room+say) Send text,media file, contact card, or text with mention @mention contact inside Room, return the message which the bot sent (only puppet-padplus supported).
method add(contact: Contact): Promise<void> Add contact in a room
method del(contact: Contact): Promise<void> Delete a contact from the room
method quit(): Promise<void> Bot quit the room itself
method topic(): Promise<string> GET topic from the room
method topic(newTopic: string): Promise<void> SET topic from the room
method announce(text: string): Promise<void> SET/GET announce from the room
method qrcode(): Promise<string> Get QR Code of the Room from the room, which can be used as scan and join the room.
method alias(contact: Contact): Promise<string> Return contact's roomAlias in the room
method [`roomAlias(contact: Contact): Promise<string \ null>`](https://wechaty.github.io/wechaty/#Room+roomAlias) Same as function alias
method has(contact: Contact): Promise<boolean> Check if the room has member contact
method memberAll(query?: string): Promise<Contact[]> Find all contacts or with specific name in a room
method [`member(query: string): Promise<null \ Contact>`](https://wechaty.github.io/wechaty/#Room+member) Find all contacts in a room, if get many, return the first one.
method memberList():Promise<Contact[]> get all room member from the room
method [`owner(): null \ Contact`](https://wechaty.github.io/wechaty/#Room+owner) Get room's owner from the room.

4.1 Class RoomInvitation

Accept room invitation

RoomInvitation API Description
method accept(): Promise<void> accept Room Invitation
method inviter(): Contact get the inviter from room invitation
method roomTopic(): Promise<string> get the room topic from room invitation
method date(): Promise<Date> the time it was created
method age(): Promise<number> the number of seconds since it has been created

TEST

NPM Docker Coverage Status

Known Vulnerabilities

Wechaty is fully automatically tested by unit and integration tests, with Continious Integration & Continious Deliver(CI/CD) support powered by CI like Travis, Shippable and Appveyor.

To test Wechaty, run:

npm test

Get to know more about the tests from Wiki:Tests

CREATING WECHATY PLUGIN

Creating and publishing a Wechaty Plugin is simple. Simply expose your module as a function that takes 1 parameter: wechaty. When your plugin is imported by Wechaty, it will pass itself in as the argument, and so you are free to add any configuration that Wechaty supports.

import { WechatyPlugin } from 'wechaty'

export default const MyPlugin: WechatyPlugin = (wechaty: Wechaty) => {
  // ...
}

The config exist so the user can pass in customizations to your Plugin. In documenting your Wechaty Plugin, you would lay out your supported config for the user.

See:

  1. Wechaty Plugin Support with KickOut Example #1939
  2. Wechaty Plugins Contrib

:pencil: RELEASE NOTES

:saxophone: Views Since Feb 15, 2019

HitCount

:sparkling_heart: POWERED BY WECHATY

Powered by Wechaty

:sparkles: Wechaty Badge

[![Powered by Wechaty](https://img.shields.io/badge/Powered%20By-Wechaty-brightgreen.svg)](https://wechaty.js.org)

Get more embed html/markdown code from Wiki:Badge

:star2: Projects Using Wechaty

  1. 一个用CNN深度神经网络给图片评分的wechaty项目
  2. Relay between Telegram and WeChat
  3. A chat bot managing the HaoShiYou wechat groups run by volunteers of haoshiyou.org
  4. An interactive chat bot to manage a TODO list
  5. Forward WeChat messages to telegram
  6. koa与wechaty实现的微信小助手,可定时提醒与发消息设定定时任务
  7. Wechaty Pay - 让线上没有难做的生意
  8. 开源社的微信机器人项目

Pull Request is welcome to add yours!

Learn more about Projects Using Wechaty at Wiki:Projects Using Wechaty

:innocent: Find a Good Server

The best practice for running Wechaty Docker/NPM is using a VPS(Virtual Private Server) outside of China, which can save you hours of time because npm install and docker pull will run smoothly without any problem.

The following VPS providers are used by the Wechaty team, and they worked perfectly in production. You can use the following link to get one in minutes. Also, doing this can support Wechaty because you are referred by us.

Location Price Ram Payment Provider
Singapore $5 512MB Paypal DigitalOcean
Japan $5 1GB Paypal Linode
Korea $10 1GB Alipay, Paypal Netdedi
Singapore $3.5 512MB Alipay, Wechat Vultr

:notes: See Also

:poop: The Story

In 2017 ...

Huan's daily life/work depends on too much chat on wechat.

  • Almost 14,000 wechat friends in May 2014, before wechat restricts a total number of friends to 5,000.
  • Almost 400 wechat rooms, and most of them have more than 400 members.

Can you imagine that? He was dying...

So a tireless bot working for me 24x7 on wechat, monitoring/filtering the most important message is badly needed. For example, it highlights discussion which contains the KEYWORDS which he want to follow up(especially in a noisy room). ;-)

At last, It's built for huan's personal study purpose of Automatically Testing.

Stargazers over time

Stargazers over time

:two_hearts: Contributors

GitHub issues GitHub pull requests Open Collective Backers Open Collective Sponsors

contributor contributor contributor contributor contributor contributor contributor contributor

This project exists thanks to all the people who contribute. [Contribute].


Contribute

:sunglasses: Backers

Backers on Open Collective

Thank you to all our backers! 🙏 [Become a backer]

Open Collective Wechaty

:smirk: Sponsors

Sponsors on Open Collective

Support this project by becoming a sponsor. Your logo will show up here with a link to your website. [Become a sponsor]

Wechaty Sponsor

Multi-language Wechaty

Python Wechaty Go Wechaty Java(Kotlin) Wechaty Scala Wechaty PHP Wechaty .NET(C#) Wechatyin

History

main v1.11 (Nov 22, 2021)

Working on reduxify the Wechaty ecosystem for applying the CQRS pattern.

v1.10 (Nov 21, 2021)

Second beta release of Wechaty, with all ecosystem npm modules with version v1.10 (wechaty-puppet, wechaty-puppet-service, etc)

v1.0 (Sep 2021)

  • Release v1.0 of Wechaty is the first beta release of Wechaty.

v0.69

  1. v0.69: Supports ES Modules (with CJS dual support) (#2232)

v0.68 (Aug 27, 2021)

  1. TLS support (#2231)
  2. The latest CommonJS version

Creators

  1. Huan (李卓桓), Tencent TVP of Chatbot
  2. Rui (李佳芮), Microsoft AI MVP, Founder & CEO of Juzi.BOT (YC W19 Alumni)

Profile of Huan LI (李卓桓) on StackOverflow

Cite Wechaty

To cite this project in publications:

@misc{wechaty,
  author = {Huan LI, Jiarui LI},
  title = {Wechaty: Conversational SDK for Chatbot Makers},
  year = {2016},
  publisher = {GitHub},
  journal = {GitHub Repository},
  howpublished = {\url{https://github.com/wechaty/wechaty}},
}

Copyright & License

  • Code & Docs © 2016-now Huan, Rui, and Wechaty Community Contributors
  • Code released under the Apache-2.0 License
  • Docs released under Creative Commons

changelog (log de mudanças)

CHANGELOG

WECHATY CONTRIBUTORS

Active Contributors

  1. @lijiarui: #2118 #1876 #1875 #1859 #1702 #1700 #1692 #1633 #1631 #1615 #1614 #1533 #1514 #1510 #1502 #1498 #1497 #1486 #1482 #1481 #1477 #1408 #1407 #1405 #1402 #1375 #1374 #1373 #1352 #1351 #1348 #1347 #1344 #1341 #1338 #1333 #1331 #1325 #1116 #1086 #816 #812 #805 #798 #757 #725 #440 #370 #364 #362 #328 #324 #323 #321 #318 #303 #292 #139 #112 #110 #38
  2. @huan: #2124 #2091 #2028 #1931 #1888 #1870 #1782 #1597 #1143 #1131 #1083 #1075 #1074 #1073 #1072 #1071 #860 #854 #841 #831 #810 #469 #462 #455 #449 #396 #351 #317 #316 #315 #314 #313 #312 #311 #168 #158 #149 #146 #143 #142 #141 #25
  3. @windmemory: #2138 #2078 #2074 #2067 #2051 #2050 #2048 #2043 #2039 #1832 #1770 #1735 #1729 #1662 #1660 #1643 #1630 #1577 #1571 #1557 #1550 #1538 #1526 #1503 #1457
  4. @su-chang: #2147 #2095 #1936 #1921 #1915 #1913 #1910 #1900 #1895 #1883 #1868 #1866 #1864 #1861 #1833
  5. @mukaiu: #1089 #337 #470 #438 #421 #420 #415 #376
  6. @JasLin: #404 #358 #105 #100 #78 #76
  7. @xinbenlv: #1814 #1017 #935 #388 #361
  8. @binsee: #844 #811 #771 #744 #727
  9. @kis87988: #1908 #1623 #1607 #1570
  10. @linyimin-bupt: #1757 #1752 #1750 #1749
  11. @TbhT: #1713 #1583 #1582
  12. @suntong: #1677 #1129 #1123
  13. @Gcaufy: #1625 #1620 #310
  14. @SilentQianyi: #1891 #1886
  15. @LinuxSuRen: #1838 #1836

Contributors

  1. @profthecopyright: #2104
  2. @yesxin: #2079
  3. @satouriko: #1904
  4. @LanceZhu: #1854
  5. @zhaoic: #1822
  6. @coderwhocode: #1819
  7. @gengchen528: #1818
  8. @monkeywithacupcake: #1759
  9. @lhr0909: #1666
  10. @jzj1993: #1661
  11. @bitwater: #1532
  12. @IdiosApps: #1087
  13. @hiwanz: #1036
  14. @htoooth: #1014
  15. @zhenyong: #770
  16. @xjchengo: #416
  17. @ax4: #380
  18. @cherry-geqi: #97

Changelog

Unreleased

Full Changelog

Implemented enhancements:

  • Change default puppet for Wechaty: puppet-puppeteer -> puppet-service #2127
  • Move HotImport related code to a Plugin #1962

Closed issues:

Merged pull requests:

v0.56 (2021-01-25)

Full Changelog

Implemented enhancements:

  • Switch from wechaty-puppet-hostie to wechaty-puppet-service #2122
  • Add wechaty-puppet-padlocal to our puppet config #2102
  • Use message.talker\(\) to replace message.from\(\) #2094
  • Create a looseInstanceOfClass to check FileBox and Puppet instances #2090
  • Issue with batch operation on room loading process #2068
  • Support more properties on contact #2036
  • Refactoring Multi-instance Wechaty Design: Try to remove the Accessory class and related codes #2027
  • Use Typed-Emitter in Wechaty #2014
  • Support WECHATY_HOSTIE_PORT environment variable #1984
  • Wechaty v0.23 PadPro Testing, an enhanced pad puppet implementation! #1668
  • Using wechaty to start a wechatOA account #1016

Fixed bugs:

  • FileBox instance type checking problem #2035
  • Wechaty.off() not work: can not remove listeners. #2019
  • friendship.contact() will load Contact only, contact.ready() is wanted. #1954

Closed issues:

  • 不能登录,也没显示二维码就直接退出 #2099
  • Can't login after scan the qrcode #2092
  • 网络不好程序自动重启后推送异常 #2088
  • Message.forward() does not support returning a message #2073
  • bot.Friendship.add() 总是报错 #2060
  • 在使用FileBox 发送视频时候出现问题 #2059
  • The AWS Access Key Id you provided does not exist in our records. #2058
  • When setting up hostie token gateway, Account was locked after 5 getContactInfo call within a second. #2040
  • Support phone related operations #2037
  • BREAKING CHANGES: remove hotImport support from wechaty #1997
  • ERR GRPC_GATEWAY GRPC SERVER ERROR #1996
  • 微信安装 #1990
  • Cannot read property 'QQ' of undefined #1982
  • Need upgrade wechaty-puppet@0.25.7 version for wechaty #1980
  • The qrcode all the time timeout #1977
  • Upgrade wechaty-puppet-hostie@0.7.10 for fix the bug of friendship.accpet() #1966
  • 23:42:53 SILL GrpcGateway callback type:【invalid-token】 #1959
  • 准备支持企业微信群吗 #1958
  • node-pre-gyp WARN #1953
  • How to filter official account numbers #1951
  • Update wechaty-puppet-hostie version for wechaty #1948
  • Is that you? #1942
  • ipad WeChat login will automatically log out, The returned QR code is invalid, you cannot log in again, you must restart #1940
  • New version release notes for wechaty 0.38 #1937
  • Can the receive the recall " room-leave". #1745
  • Refactor message.ts file to fit the requirement in CodeClimate #1663
  • Want to get information about sent-out message #1501

Merged pull requests:

v0.38 (2020-04-08)

Full Changelog

Implemented enhancements:

  • BREAKING CHANGE: Remove MessageUserQueryFilter #1929
  • Simplify the Accessory class logic #1924
  • Update Docker Base Image form Ubuntu:18 to Ubuntu:19 #1920
  • wechaty dependency modules deep cleaning #1917
  • FileBox version incompatible across wechaty wechaty-puppet and wechaty-puppet-x #1914
  • Publish Wechaty Document Site to https://wechaty.js.org #1912
  • Support Encode & Decode QR Code functions from file-box@0.10 #1907
  • Design an new Image class for receive images with different sizes. #1871
  • Integrate Wechat with Matrix with the power of Wechaty #1737

Fixed bugs:

  • Can not create Image class. #1922

Closed issues:

  • 微信退出登录后,重新登录不了ipad #1839
  • 基于padpro协议不能发送微信小程序 #1837

Merged pull requests:

v0.30 (2020-02-08)

Full Changelog

Implemented enhancements:

  • Support room.sayhi ${contact} ${num++} #1899
  • Support new event named "message" on Room #1897
  • Support search new friends by phone number or user name. #1892
  • {Room,Contact}.qrcode() should return QR Code Value instead of Image #1889
  • Implmented UrlLink.create(url) with Open Graph support #1887
  • 主动撤回消息 #1885
  • Implement Label in Wechaty #1856
  • Would like to have the timestamp on the room/friendship events #1829
  • Wechaty v0.26 iosBird Testing, an iOS hook puppet implementation! #1775
  • Missing example code #1756
  • BREAKING CHANGE v0.25 Room.say(text: string, mention: Contact[]) deprecated #1730
  • New Puppet: Ioscat (iPhone Wechat App Hook) #1528

Fixed bugs:

  • bot.logonoff()报错【static puppet not found for Wechaty】 #1878
  • JSDoc publishing problem: missed the Room class #1872
  • Wechaty can not get room info when the bot has been removed from one room. #1834
  • bot.Contact.find() error message misleading #1812
  • 机器人会隔一段时间自动退出 #1810

Closed issues:

  • room.announce()中当参数为空字符串时, 调用获取群公告而不是设置群公告为空 #1902
  • 延期通过好友 #1890
  • I want wechaty puppet padpro token to create a wechat bot #1882
  • msg.mentionSelf()方法不对,始终返回false #1877
  • 需要取到Contactid或者微信号 #1873
  • Function message toContact\(\) should to be implemented. #1855
  • install error #1853
  • wechaty-puppet can not install in electron #1851
  • wechaty-puppet-macpro alpha test #1846
  • Action required: Greenkeeper could not be activated 🚨 #1781
  • 经常报以下warning #1634
  • Doesn't work with UK Android account/device #1556

Merged pull requests:

v0.28 (2019-09-02)

Full Changelog

Implemented enhancements:

  • Room announcement is not working properly for some puppet implementation #1816
  • [Feature] Send Mini-Program #1806
  • Upgrade the repo to use Chatie DevOps toolset #1793
  • Easy install for wechaty-puppet-puppeteer #1792
  • 添加用 id 寻找Room RoomQueryFilter #1785
  • Generate version.ts before publish to NPM #1780
  • Use @chatie/tsconfig as the tsconfig.json base configuration #1777
  • Could you please upgrade dependency for wechaty-puppet-puppeteer #1758
  • Missing comment example code in room.ts file #1751

Fixed bugs:

  • missing puppets in latest docker image #1820
  • Cannot Contact.say\(imageAsFileBox\) with puppeteer #1795
  • Document bug in README #1690
  • Fix comment, in replacing #1784 #1814 (xinbenlv)

Closed issues:

  • 登录不了一个错误报告 #1841
  • 想获取微信消息列表,Message.findAll()返回为空? #1825
  • 用了一个月itchat相安无事,用了2小时wechaty... #1815
  • Wechaty process.exit(1) if token is not valid #1811
  • TSError: ⨯ Unable to compile TypeScript: #1791
  • padpro 无法连接服务器 #1789
  • Action required: Greenkeeper could not be activated 🚨 #1765
  • Mention api add @ automatically no matter it is already exists in the text #1718

Merged pull requests:

v0.26.0 (2019-05-11)

Full Changelog

Implemented enhancements:

  • Recalled message design #1728
  • Message.toString format discussion #1676
  • Upgrade wechaty-puppet-padchat stable version #1642
  • New Puppet - wechaty-puppet-padpro #1629
  • room mention contact should using roomAlias #1604
  • for Pull Request: Disable puppet unit tests that requires a token #1580
  • Refresh contact self when updating self name or signature #1576
  • Pass mention list down to puppets #1560
  • Wechaty Puppet Ioscat Testing: iPhone(iOS) Wechat Hooking Support are comming! #1530

Fixed bugs:

  • Room.owner() function is printing log in info level #1769
  • Build is failing caused by promisify missing arg3 #1761
  • Comment: Example code error #1746
  • Documentation网站挂掉了 #1739
  • 构建docker镜像报错 #1593
  • memberAll() not running in docker after v0.21.27 #1573
  • ERR PuppetPuppeteer roomRawPayload #1547

Closed issues:

  • invalid processingToken:make the account logout.. #1766
  • Action required: Greenkeeper could not be activated 🚨 #1764
  • Action required: Greenkeeper could not be activated 🚨 #1763
  • [已解决]无法自动通过好友请求 #1755
  • Missing comment example code in contact.ts file #1748
  • Is there a way to send message to a contact instead of making a reply using say()? #1734
  • await message.mentionSelf() is invalid #1725
  • message.mentionSelf() #1724
  • wechaty-puppet-padpro 获得的语音消息文件是slk格式 #1720
  • 有没有针对企业微信App的登录和收发消息的方案啊? #1717
  • 关于win7安装 npm install wechaty-puppet-padpro 的问题 #1716
  • 小桔机器人挺好用,希望详细对比WeTools,并分享开发Roadmap,谢谢 #1712
  • npm start 到 puppeteer@1.12.2 报错。。。 #1708
  • 这是什么 #1703
  • 使用自动拉人入群功能 #1697
  • docker compose #1688
  • Errors occur sometimes when bot running #1675
  • msg.say 重复执行 #1674
  • WECHATY_PUPPET=mock failed, TypeError [ERR_INVALID_ARG_TYPE]: The "request" argument must be of type string #1673
  • Room.say method is not working #1665
  • 这是基于什么协议的web pc ipad #1664
  • Adjust data sync order when message event triggered #1659
  • 乱码 #1656
  • 乱码 #1655
  • ipad #1650
  • [RFC] custom id on Contact #1647
  • 请问, 怎么让机器人通过手机号添加好友 #1639
  • 请问wechaty可以关掉日志输出吗? #1638
  • ubuntu 18.04下无法正常启动chrome #1637
  • 在docker容器中,npm install wechaty,运行mybot报错:Failed to launch chrome! #1636
  • Why I stuck here? #1624
  • can robot join room by qrcode? #1622
  • 调用私发/群内发消息接口,emit出的消息事件中消息时间有误 #1619
  • 调用发消息接口后,emit 出的消息事件对应的消息时间不正确 #1617
  • room.on('join',function(room, inviteeList, inviter)), can not get the inviteeList i.e. the new member #1613
  • cgggg #1610
  • c #1609
  • I use this function keyroom.add(contact),it doesn't work #1601
  • use "wechaty-puppet-padchat" cannot login successfully #1600
  • wechaty无法查找到群名称中有~的群 #1592
  • Sending messages with MessageType=1 is not supported #1588
  • 不能通过群成员添加好友 #1578
  • [RFC] Launch broken when using wechaty-puppet-padchat #1575
  • Delete the breaking change tag in issue #1565

Merged pull requests:

v0.22.4 (2018-08-29)

Full Changelog

Implemented enhancements:

  • Closing wechaty-puppet-padchat beta test #1572
  • Add API List to README #1566
  • Add support for send url rich media message #718
  • contact.stranger() still returns true after adding friends between bot and user #293
  • be careful about the unofficial client check and report (in browser) #29

Fixed bugs:

  • ReadError: Database is not open [object Promise] - FlashStoreSync was closed when need writing #1433
  • The latest docker get ContactGetter error when get wechat OA message #974
  • "Chromium revision is not downloaded." #954
  • Room.memberAll(FilterString) if FilterString are all with emojis #704
  • Room.find\(\) can find the room when the bot is removed from the room #254

Closed issues:

  • bot logined, but scan event still. #1567
  • Wechaty v0.20 & Puppet Padchat v0.14 Released. Padchat Alpha Testing Closed. #1296
  • Session closed when running for a long time #1052

Merged pull requests:

v0.20.0 (2018-08-18)

Full Changelog

Implemented enhancements:

  • [RFC] Suggest to have more detailed error message when doing ContactSelf related operations #1549
  • feat: add receive and send link #1539
  • Feat: add Message.find to search in cache. #1534
  • Get Rid of the Dependences which requires build when npm install #1529
  • Puppet Padchat Not Supported Attachment File Type in Message. #1524
  • BREAKING CHANGE: v0.20 Contact.alias changed from Sync to Async #1500
  • Pre-install all official supported Puppets when build docker image #1493
  • 【Proposal】New 'room-invite' event #1492
  • Message type: mini program for Message.type() #1444
  • Promote PuppetPadchat to SOLO NPM Module wechaty-puppet-padchat #1372
  • PuppetPadchat: support message type of StatusNotify with op id push update information #1310
  • Make tslint.json to be simple with extends standard. #1303
  • feat: PuppetPadchat supports get QrCode for userSelf(can be scan by others for adding friend) #1301
  • New Puppet: PuppetPadchat #1249
  • feat: add Wechaty.unref\(\) support to unref all the underlying resources. #1197
  • Disable HotImport in PRODUCTION Environment #907
  • Reconstruction PuppeteerMessage Class #724
  • [New Puppet] PuppetWechat4u - enable by WECHATY\_PUPPET=wechat4u #69

Fixed bugs:

  • TypeError: Cannot read property 'type' of undefined at AnotherOriginalClass.type #1545
  • contact alias not sync after call contact.alias(string) to set alias #1517
  • Fix Puppet Memory Multiplex Problem with Multi-Instance Wechaty and Pre-Instanced Puppet #1516
  • Question: How to pre-set puppet module to be used by wechaty with docker #1478
  • JSDoc bugs #1475
  • PuppetPadChat:Contact.avatar() Error #1473
  • PuppetWeb loses event listeners when resetting #1470
  • Check the puppet version to satisfy the Wechaty requirement #1453
  • Split the xxxIdList to chunks when map it to payload to prevent block the event loop #1450
  • puppetPadchat.reset\(\) should call start\(\) after stop\(\) #1385
  • cannot run speech-to-text-bot #1350
  • Error: Cannot stub non-existent own property #1247
  • How to run hot-import-bot example #1222
  • PuppetWebEvent onLogin: browser not fully loaded(ttl=30), retry later #970

Closed issues:

  • appear bug when logout use padchat #1559
  • [RFC] Shall we clean up room information when we receive room events? #1552
  • Want to create UrlLink with control on all properties #1541
  • memory-card cannot save successfully #1537
  • Error: Cannot find module 'babel-plugin-transform-runtime' from '/bot' #1536
  • contact name not sync after call sync() or restart docker (RPC) #1531
  • Why wechaty need express #1523
  • calling await bot.stop() can't stop the bot #1519
  • @ 人没提示 #1504
  • Puppet Name use full npm name instead of alias: padchat => wechaty-puppet-padchat #1496
  • why friendship.contact().name() is "" #1490
  • why the padchat always restart(login)? #1485
  • sending a custom emotic led to an error on the server #1483
  • PuppetPadChat: The server always restart on pm2. #1472
  • PuppetPadchat Not response after run several hours #1443
  • PuppetPadchat: make contact has a function with real wechat ID #1423
  • Maybe we shouldn't syncContactsAndRooms per 3 hours #1414
  • PuppetPadchat: Cannot read property 'user_name' of undefined #1392
  • I changed my operating system,but when run dev ,still output restarting #1382
  • Room-join event show ERR PuppetWebFirer fireRoomJoin() not found(yet) error (Bug) #1169
  • Room.findAll\(\) get error when rooms more than 400 #1112
  • emit error event when listen the page has been closed #1110

Merged pull requests:

v0.18.0 (2018-07-11)

Full Changelog

Implemented enhancements:

  • PuppetPadchat Upgrade TODO Lists #1442
  • Dynamic install puppet implementations instead of pre-install #1437
  • Split PuppetWechat4u as a NPM module #1419
  • PuppetPadchat: The contact.star() doesn't work #1413
  • Promote PuppetPuppeteer to SOLO NPM Module wechaty-puppet-puppeteer #1371
  • Promote Puppet to SOLO NPM Module wechaty-puppet #1370
  • New Puppet: PuppetMock for Testing & Starter #1177

Fixed bugs:

  • Cannot detect the the environment WECHATY_PUPPET v0.17.118 #1456
  • PuppetPadchat Server logout and login cycle average 3-5mins #1446
  • WARN PuppetPuppeteer initWatchdogForPuppet() dog.on(reset) last food:inited, timeout:120000 #1439
  • ts-node 7.0 breaking change: Skip files by default #1383
  • Can not find room after add member to the room #1380
  • PuppetPadchat: friend value of ContactPayload is undefined #1359
  • WXGetContact cannot get user_name #1358
  • leveldown::Database::Close: Program terminated with signal SIGSEGV, Segmentation fault. #1355

Closed issues:

  • QR Code problem under screen/xterm #1455
  • How to get the room title in v0.17 wechaty? #1454
  • should not download chromium by default #1451
  • PuppetPadChat:Send media file. #1436
  • PuppetPadchat:My wechat accou can not login. #1416
  • It reports errors when the room delete one member. #1415
  • cannot get user\_name from raw payload: {} \[object Promise\] Error #1399
  • Where can I see the complete API documentation of puppet-padchat, such as createRoom and Moment #1391
  • still restart #1378
  • WARN PuppetPuppeteer #1376
  • m.say() repeat many many times #1216
  • room.say mention is not work #1185
  • 获取所有群 #1020
  • Any way to keep login for days? #988

Merged pull requests:

v0.16.0 (2018-06-21)

Full Changelog

Implemented enhancements:

  • Unable to start multiple instances with padchat puppet #1367
  • Prevent the Floating Promise in the Async/Await Code #1346
  • BREAKING CHANGES v0.16: FriendRequest class will be replaced with Friendship #1312
  • feat: PuppetPadchat can set avatar for userself support. #1298
  • BREAKING CHANGE: v0.16 Room.topic\(\) change from Sycn to Async #1295
  • BREAKING CHANGE: v0.16 Room.alias\(contact\) change from Sycn to Async #1293
  • BREAKING CHANGE: v0.16 Room.memberList\(\) change from Sycn to Async #1290
  • BREAKING CHANGE: v0.16 Room.has\(contact\) change from Sycn to Async #1289
  • BREAKING CHANGE: v0.16 scan event args will be different! #1262
  • BREAKING CHANGE: v0.16 Message.mention\(\) change from sync to async #1259
  • BREAKING CHANGES: v0.16 Room.member\(\) from sync to async #1258
  • Promote Profile class to a solo NPM module: MemoryCard #1257
  • rewrite roomFindAll() #1255
  • function friendRequestAccept #1254
  • read messageRawPayload by id #1253
  • function friendRequestSend #1252
  • rewrite contactFindAll() #1251
  • Upgrade Docker Base Image from Ubuntu 17.10 to 18.04 #1239
  • NPM Switch: promise-retry to replace retry-promise #1235
  • Add unit test to puppet accessory #1219
  • Use browser implementation of Node.js' stream library #1201
  • feat: Add for await \(const contact of room\) {} support by ES6 iterators override #1198
  • BREAKING CHANGE: v0.16 on('friend`) arguments changed! #1196
  • TypeScript Strict Mode: set noImplicitAny to true #1180
  • Generic for Return Child Class Type in Abstract Class Implementation #1178
  • BREAKING CHANGE: v0.16 Message.ext() return '.ext' instead of 'ext' before #1168
  • Encapsulated Contact, Messag, FriendRequest, and Room into PuppetWeb #1166
  • BREAKING CHANGE: v0.16 will remove MediaMessage class #1164
  • BREAKING CHANGE: v0.16 will replace Message.content\(\) with Message.text\(\) #1163
  • Continious Deploy to NPM with @next tag when the MINOR version number is odd(in developing branch) #1158
  • BREAKING CHANGE: first arg of room-leave event licener changed from Contact to Contact\[\] #723
  • Should throw Exception when there have API Error. #683
  • delay time for all function(method) that calls Tencent API #596
  • [todo] allow Wechaty to be multi-instance #518

Fixed bugs:

  • When bot quit the room, bot still thought it in the room. #1345
  • When the bot remove one out of the group, room data didn't refresh #1343
  • Room Event cannot work as expect after create a new room #1342
  • cannot refresh room data when execute the code again #1339
  • can't run demo #1337
  • room-leave error #1334
  • room-join event, when run room.say, it actually run contact.say #1330
  • room-leave event cannot get leaver member #1329
  • should refresh room data when there is a room event #1328
  • [room topic event] throw error: no changerId found #1326
  • room-join cannot get member #1324
  • contact.avatar\(\) cannot work as expect #1321
  • run contact-bot throw error #1319
  • Padchat: WXAutoLogin result is faild, but I still receive message #1316
  • Fix the + in data for PuppetPadchat #1302
  • get fromId not right for room invitation sys message #1297
  • Error: The command "echo $TRAVIS_OS_NAME" exited with 1. #1236
  • TravisCI Conditional Deployment #1211
  • Update the peerDependencies of rx-queue: rxjs@6 from rxjs@5 #1205
  • Cannot send image message on v0.15.21 #1175
  • cannot refresh room topic or contact name #1157
  • How to avoid the memory leak #981
  • Puppeteer Navigation Timeout Exceeded: 30000ms exceeded #870
  • SyntaxError: Unexpected end of JSON input #846
  • function Message.mention\(\) should recognize both magic code and blank #813

Closed issues:

  • BREAKING CHANGE v0.16 Wechaty.self() eprecated, use Wechaty.userSelf() instead #1369
  • BREAKING CHANGE v0.16 Contact.personal() and Contact.official() deprecated, use Contact.type() instead #1366
  • no encodedText error in padchat-decode.ts #1365
  • BREAKING CHANGE v0.16 room.add return Promise\<void\> instead of return Promise\<boolean\> #1362
  • media-file-bot cannot save xlsx file #1349
  • room-leave-error #1335
  • room-leave event throw error, cannot get leaver contact #1323
  • friendship cannot accept friend request automatically #1322
  • PadchatRpc WXCheckQRCode result: {"message":"WS请求错误","status":-19} #1315
  • m.forward 是 undefined ? #1272
  • Navigation Timeout Exceeded: 30000ms exceeded #1248
  • profile.set can only set 'cookies' instead of other keys #1240
  • Create a websocket ipad demo #1228
  • Proper wechaty and its dependency installation #1225
  • can't run the typescript examples #1221
  • Scan QR Code not shown on terminal, wechaty@0.14.4 #1220
  • 请问怎么添加微信群中的人当做自己的好友呢 有例子可以参考吗 #1207
  • room-bot.ts error #1199
  • TypeScript 2.9 with trailing comma after rest parameters. #1188
  • code example 'media-file-bot' not working #1183
  • QrCode scan event not refresh on v0.15.21 #1175 #1176
  • Version 10 of node.js has been released #1170
  • 自动加好友,加好友成功后,向对方发信息报错 #1165
  • Use injection-js for Wechaty v1.0 provide the resolvers of the Wechaty Puppet #1146
  • findAll ,WARN Room parse() on a empty rawObj #1141
  • Rename all find\(\) method to search\(\) #1132
  • ERR PuppetWebBridge init() exception: Error: connect ECONNREFUSED 127.0.0.1:35493 #1113
  • Feature request: sending file with a stream (creating media message with a stream) #1092
  • node_modules/_wechaty@0.13.36@wechaty/dist/src/config.d.ts(1,24): error TS2307: Cannot find module 'raven'. #1035

Merged pull requests:

v0.14.0 (2018-04-15)

Full Changelog

Implemented enhancements:

  • Rename {test,fixture,example,...} to {tests,fixtures,examples,...} etc. #1127
  • Trigger Deploy on Branch /v\d+.\d+\$/ #956
  • Wechaty Version Numbering #905
  • [New Puppet] Puppeteer #790
  • [enhancement] Add timezone in to Dockerfile #594
  • [docker] to prevent docker users install a local dependence of wechaty #281

Fixed bugs:

  • When run CI inside the container: openBinaryFile: does not exist (No such file or directory) #1137
  • Try to use Wercker Shippable CI to replace Circle CI #1134
  • Pupeteer not work after upgrade to v1.1 #1103
  • 关于MsgType 的介绍文档404了 #1079
  • Docker test fail because ts-node behavior changed between v3 and v4 #1050
  • fix description #1027
  • ERR Profile save() exception: Error: EACCES: permission denied, open '/bot/demo.wechaty.json' #982
  • Dockerfile.onbuild build error.Directory permissions wrong #961
  • [docker] onbuild failed to start when we put wechaty as dependency in package.json #500

Closed issues:

  • How to send file #1150
  • Signals (e.g. ^C) handling #1122
  • OK to add a .eslintrc.js file? #1120
  • Q: All the media types #1115
  • TTL expired error when login #1114
  • Cannot read property 'MemberList' of undefined still exisit in the latest docker version #1111
  • emoji suggestion #1108
  • Regenerate docs/index.md by run npm run doc #1105
  • hot-reload-bot adding hot-reloading config #1100
  • Third options to run wechaty #1085
  • issue #1076
  • Session last only for 1 hour in Azure #1059
  • 出现 no Url 错误后,程序崩溃 #1055
  • 图片发送一次后,图片损坏 #1040
  • ERR PuppetWebBridge init() exception #1018
  • 我实在解决不了这个问题了~菜鸟一枚 #998
  • TypeError: Cannot read property 'MemberList' of undefined #984
  • Using hot-import cannot quit wechaty when quit the code #978
  • Error: Navigation Timeout Exceeded: 30000ms exceeded #966
  • hot-reload does not work #958
  • [docker] Login error #950
  • Invalid audio output parameters received; using fake audio path. #939
  • Keep getting "can not found bot file: src/main.ts" #937
  • glSetDrawRectangleCHROMIUM: failed on surface #934
  • [FR] Create an example for using hot-import for listener and other modules #923
  • Bot log out frequently and got some strange error between it logout and relogin automatically #612

Merged pull requests:

  • chore(package): update ws to version 5.1.0 #1143 (huan)
  • chore(package): update puppeteer to version 1.2.0 #1131 (huan)
    • [+] add one more test case for digestEmoji(), close #1108 #1129 (suntong)
  • hot-reload-bot adding hot-reloading config close #1066, close #1100 #1123 (suntong)
  • cannot recognize room event #1116 (lijiarui)
  • fix chown: invalid user: ‘bot’ #1089 (mukaiu)
  • Add troubleshooting for hidden .txt files (Windows) #1087 (IdiosApps)
  • fix #1079 #1086 (lijiarui)
  • chore(package): update @types/node to version 9.4.0 #1083 (huan)
  • chore(package): update finis to version 0.4.1 #1075 (huan)
  • chore(package): update ts-node to version 4.1.0 #1074 (huan)
  • chore(package): update mime to version 2.2.0 #1073 (huan)
  • chore(package): update tslint to version 5.9.0 #1072 (huan)
  • chore(package): update sinon to version 4.2.0 #1071 (huan)
  • fail to install node dependencies #1036 (hiwanz)
  • Change init to start in demo #1017 (xinbenlv)
  • Update tuling123-bot.ts #1014 (htoooth)
  • Fix #923 #935 (xinbenlv)

v0.12.0 (2017-10-30)

Full Changelog

Implemented enhancements:

  • Promote rx-queue to SOLO NPM Module #938
  • Add Wechaty.logonoff() method #926
  • Registe Wechaty Listeners with a try {} catch {} block in order to prevent listener function crash the framework. #878
  • Upgrade CircleCI from 1.0 to 2.0 #863
  • Switch Docker Node Image from alphin to official node:7 #862
  • Click Web Wechat Switch Account Automatically to get qrcode immediately when bot logout #636
  • Upgrade docker image from Node.js v7 to v8 #577
  • [todo] switch unit test tool from AVA to TAPE #513

Fixed bugs:

  • [CI] Homebrew must be run under Ruby 2.3! You're running 2.0.0. (RuntimeError) #936
  • "PromiseRejectionHandledWarning: Promise rejection was handled asynchronously" when Wechat says "当前登录环境异常" #925
  • TypeError: cookieList.filter is not a function #919
  • TypeError: Cannot read property 'error' of null #918
  • ERR PuppetWebBridge init() initPage() onLoad() exception: undefined #917
  • Sometimes Wechaty can't login (with puppeteer) #899
  • [ci] WebDriver Error: "no such session" #756
  • [ci] execute proxyWechaty(init) error: 503, init() without a ready angular env #329
  • [ci log] watchdog reset after 120 seconds #195
  • Selenium WebDriver driver.getSession() wait a long time #86

Closed issues:

  • 在登录失败时的异常提示优化 #898
  • CANT RUN THE WECHATY-GETTING-STARTED, PUPPETWEBROWSER valid() getSession() #891
  • Error after restart vps invalid driver at ttl 0 #788
  • webdriver.executeScript wait a long time(26s) before page load #2

Merged pull requests:

  • Replace WebDriver by Puppeteer (#790) #860 (huan)
  • chore(package): update coveralls to version 3.0.0 #854 (huan)

v0.9.0 (2017-10-04)

Full Changelog

Implemented enhancements:

  • Support hot-reload for Wechaty events listeners #820
  • [jsdoc] additional optimizations #774
  • [bug] Support for send 25Mb+ size files #766
  • [Announcement] Drop support for phantomjs #763
  • chrome-headless support #739
  • Add Transpond Message #726
  • Cannot send pdf file using MediaMessage #710
  • Use Sentry.io to report exceptions #580
  • [enhancement] Add pdf, docx etc support to MediaMessage(now only picture is supported) #538
  • use babel-node to run javascript(.js) file inside docker #507
  • [todo] Change to use native Dom Websocket instead of socket.io library #502
  • License Change: from ISC to Apache-2.0 #474
  • requesting a new QR code cost more than 2 minutes #434
  • Send(upload) an image twice will cause error. #422
  • Keep emoji characters from user name and room name #207
  • [Feature request] Sending Stickers #156
  • [Feature request] @mention support? #153
  • [Docker] add a onbuild image to Wechaty #147
  • [doc] To Embed Document in Wechaty Code for Generating Automaticly #73
  • it seems RECALLED: 10002 message dose't trigger on('message') event #8
  • Support Message Type of Image/Video #4

Fixed bugs:

  • Cannot send image after restart #777
  • [bug]Cannot read property 'getUserName' of undefined #772
  • [tslint] stuck on v5.3 and can not upgrade #762
  • CI, green keeper and package-lock under npm 5 #656
  • watchDogReset() watchdog reset after 60 seconds (phantomjs head) #633
  • [test] Unit Test for mentioned feature does not run at all #623
  • error TS2345: Argument of type 'string | MemberQueryFilter' is not assignable to parameter of type 'MemberQueryFilter' #622
  • [Doc] Add say\(new MediaMessage\('/tmp/mediafile.gif'\)\) documentation #587
  • Node Typing BUG: process.env: any #582
  • [ci] Appveyor error: should get cookies after loadSession\(\) #579
  • wechaty v0.8.54 does not install all required component #522
  • message.mentioned() does not work as expected #512
  • Some types of media file is saved as a 0 byte file. #504
  • ts-node commond not found after update docker image #492
  • may be not need .vscode folder, need .editorconfig #489
  • Room.findAll\(\) should always return a ready\(\)-ed instance #477
  • MediaMessage#filename() should not use timestamp as part of the filename #465
  • [ci] × src » message » ready() contact ready for ToNickName #445
  • Build Docker image from zixia/wechaty:onbuild,/bot/node_modules does not exist. #436
  • Concat.avatar() faild ,when hostname changed from https://wx.qq.com to https://wx2.qq.com #418
  • [test] Unit Tests under Linux by TravisCI keep failing #384
  • checkRoomJoin\(\) cannot get inviteeList sometimes #248
  • [ci log] no driver process after quit #210
  • [ci] no new tests completed within the last 180000ms of inactivity #175
  • how to NOT scan the QRCode on each opening #151
  • Unhandled Rejection: checkLegacyResponse() at error.js:505 #122
  • WebDriverError: unknown error: r.isBrandContact is not a function #81
  • Can't get wechaty up and running using phantomjs #60
  • accountFactory of angularjs in wxapp work not right under Phantomjs, but it work without problem with chrome #28
  • Fixed: replace document.domain with location.hostname since front one sometimes lose subdomain name #770 (zhenyong)

Closed issues:

  • vscode setting config error #843
  • add static method Message.findAll\(\) #765
  • cannot find Chrome binary #746
  • UnhandledPromiseRejectionWarning: Unhandled promise rejection (rejection id: 2): Error: no puppet instance #738
  • MediaMessage.filename() cannot get correct img name. #722
  • MediaMessage.ext() cannot work as expect #721
  • the latest docker version 139 cannot send file #720
  • what I need is just a lib instead of a product #709
  • How to link it with personal account. #693
  • Sending Images #690
  • windows 10 throws PuppetWeb initBrowser() exception: got invalid driver at ttl 0 #688
  • Group game #675
  • if wechaty cannot get inviteeList when emit room-join , suggest it emit room-fire and get warning info. #671
  • 在 websocket 的回调中无法使用 wechaty 吗 #665
  • Room.find() 发送消息提示 say is not a function #664
  • 获取不到avatar #645
  • Get ECONNREFUSED when bot logout and cannot re-login #617
  • Modify Function Room.create return type, from Promise\<Room\> to Promise\<Room|null\> #616
  • init 后会打开扫码的网页? #601
  • Error: ENOENT: no such file or directory, stat '/wechaty/dist/.git' #581
  • 在 Windows Server 上初始化的时候,chromedriver 报错。 #574
  • 启动后卡住问题 #566
  • whatever #543
  • [enhancement] handle room name change event #532
  • got [aq.qq.com] domain #526
  • some strange session error #523
  • static Contact.find() / static Contact.findAll() throws exception #520
  • Cannot set alias of Contact Object getting from message.from\(\) method when Contact is not a friend #509
  • room.member() can not return right result #437
  • windows run program send images throw out error #427
  • group names have HTML in them #382
  • jsdoc2md may flush some pieces of the embedded doc #378
  • Secure WebSocket(wss) do not work with Self Signed Certificate in PhantomJS #12

Merged pull requests:

v0.8.2 (2017-05-03)

Full Changelog

Implemented enhancements:

  • Promote StateMonitor to a solo NPM module: StateSwitch #466
  • Display detailed error trace when an error is caught in async #360
  • Room.find({topic: topic}) should allowed to return null #291
  • add room-bot-leave event #250
  • Prepare to rename the nick/remark/display for contact/room #217
  • [new feature] add function message.mention() #216
  • [new feature] set bot's nickname in the group #201
  • [feature request] fire room-join when someone joins from a QR Code #155
  • #4 send image/video #337 (mukaiu)

Fixed bugs:

  • Reuse MediaMessage upload fail.Can be allowed MediaMessage reuse? #439
  • Room.member() cannot find contact correctly #365
  • Room.alias() should return null if we have not set the alias in the room #283
  • Cannot read property 'Symbol(Symbol.iterator)' of undefined #273
  • add sys message in FriendRequest Event #260
  • [docker] chromium-browser fail to start after upgrading chromium from v53 to v56 #235
  • typo in Wiki #205
  • doc bug #196
  • Linting Error from PR@lijiarui #181
  • [document] should list only the public/stable API to users #174

Closed issues:

  • Always getSession timeout #463
  • how to create more bots at once #460
  • how do we get avatar link? #424
  • can't run the example #423
  • 有没有查找好友的方法? #411
  • ding-dong-bot-ts cannot run normally on Mac #410
  • Failed due to EAI_AGAIN registry.yarnpkg.com:443 #408
  • cannot remark friend in centos system #406
  • MediaMessage in ding-dong-bot example can not be create #399
  • wechaty can auto receive money(red envolop/transfer) on account. #398
  • [bug] room.say() return contact's alias when bot set alias for some one #394
  • Room.fresh\(\)not work; Room.alias\(\)returns null #391
  • should addphantomjs-prebuilt in package.json #385
  • error on room join: TypeError: room.topic is not a function #383
  • problem starting docker container . SyntaxError: Unexpected token function #352
  • [discuss] Rename Wechaty to Chatie? #346
  • cannot send images / this.puppet.getBaseRequest is not a function #338
  • Some strange log warn #336
  • run bot in server,about 1 hour ago ,the process will be killed #330
  • wechaty 0.7.21 works but 0.7.24 failed with Argument of type 'string | Promise\<boolean\>' is not assignable to parameter of type 'string'. #282
  • how i can save avatar without await keywords? #278
  • 如何获取MsgType为APP类型的信息,解析不成xml #262
  • [linting] fix needed for new tslint rule: trailing-comma #251
  • Avatar return empty image in example/contact-bot.ts #246
  • Room&Contact.find() should throw exception when it get more than one value #229
  • Contact.findAll() return contactList includes oa account #222
  • timeouts when running unattended #184
  • room.member() cannot find contact when contact set whose alias in the room #173

Merged pull requests:

  • Lazy to create a stream #470 (mukaiu)
  • chore(package): update state-switch to version 0.1.7 #469 (huan)
  • chore(package): update bl to version 1.2.1 #462 (huan)
  • fix(package): update brolog to version 1.0.13 #455 (huan)
  • chore(package): update fluent-ffmpeg to version 2.1.2 #449 (huan)
  • add magic code for room.say() when @bot happen #440 (lijiarui)
  • #3 support send gif #438 (mukaiu)
  • Limit video file size #421 (mukaiu)
  • add room.say(MediaMessage) #420 (mukaiu)
  • Fix chrome driver path problem in Windows #416 (xjchengo)
  • fix upload media url error #415 (mukaiu)
  • support brand checking of contact #404 (JasLin)
  • chore(package): update chromedriver to version 2.29.0 #396 (huan)
  • Add missing %s content for leaver not found error #388 (xinbenlv)
  • fix jsdoc flush issue #378 and minor fix on the doc examples #380 (ax4)
  • Limit the size of the sending file #376 (mukaiu)
  • add room-leave event #370 (lijiarui)
  • room.memberAll() & change room.member() query to 3 types #364 (lijiarui)
  • Add mention #362 (lijiarui)
  • Printout entire error trace when unhandledRejection was caught #361 (xinbenlv)
  • first item of memberList as owner is confusion #358 (JasLin)
  • chore(package): update ts-node to version 3.0.2 #351 (huan)
  • fix room test #328 (lijiarui)
  • remove blank #324 (lijiarui)
  • remove m.send() fucntion #323 (lijiarui)
  • Add JsDoc for Class Contact #321 (lijiarui)
  • 291 #318 (lijiarui)
  • chore(package): update yarn to version 0.21.3 #317 (huan)
  • chore(package): update nyc to version 10.1.2 #316 (huan)
  • chore(package): update tslint to version 4.5.1 #315 (huan)
  • chore(package): update check-node-version to version 2.0.1 #314 (huan)
  • chore(package): update @types/ws to version 0.0.38 #313 (huan)
  • chore(package): update @types/node to version 7.0.7 #312 (huan)
  • fix(package): update @types/selenium-webdriver to version 3.0.0 #311 (huan)
  • added hot load bots #310 (Gcaufy)
  • #283 #303 (lijiarui)
  • #291 change throw error to return null #292 (lijiarui)

v0.7.0 (2016-12-29)

Full Changelog

Implemented enhancements:

  • 请问可以获取联系人或群成员的性别、所属地域、头像吗? #121
  • Function Room.add() should return Promise\<boolean\> #119
  • Could you add api to find contact by remark #117
  • Need to support AppMsgType: 100001 with MsgType: 49 #114
  • get room owner on event 'room-join','room-topic' #105 (JasLin)

Fixed bugs:

  • to silence all the output from webdriver(chromedriver) for log level INFO #150
  • tsc compiling error: Cannot find namespace 'webdriver' #136
  • remark(null) doesn't work #130
  • Cannot identify ['] in room topic #116
  • room.member() cannot get member when bot set remark for friend #104
  • contactFind(function (c) { return /.*/.test(c) }) rejected: javascript error: Unexpected token #98
  • Error: Chrome failed to start: was killed #95
  • Function message.to\(\): Contact|Room bug #88
  • Session Cookies not loaded correctly? #31

Closed issues:

  • too many levels of symbolic links #165
  • node dist/example/ding-dong-bot.js example运行异常 #159
  • deploying to server problems (running headless) #154
  • wechaty mybot.js start error #126
  • Room-join' para inviteeList[] cannot always work well when contain emoji #125
  • [help] install wechaty and its types #124
  • ERR Message ready() exception: Error: Contact.load(): id not found #123
  • enhance request.hello function #120
  • 无法自动通过好友请求 #115
  • [EVENT INVITATION] Welcome to join Beijing Node Party 18: Wechaty & ChatBot on 11th Dec. #107
  • another problem about docker run #103
  • Error: Server terminated early with status 127 #102
  • failed run demo in docker under centos #101
  • Wechaty.send() error when send message to the room #89
  • 基础运行报错.....我都有点不好意思问了.....汗.... #82

Merged pull requests:

  • chore(package): update @types/node to version 6.0.54 #168 (huan)
  • chore(package): update tslint to version 4.2.0 #158 (huan)
  • chore(package): update @types/selenium-webdriver to version 2.53.37 #149 (huan)
  • chore(package): update tslint to version 4.1.1 #146 (huan)
  • chore(package): update @types/sinon to version 1.16.33 #143 (huan)
  • chore(package): update @types/node to version 6.0.52 #142 (huan)
  • chore(package): update tslint to version 4.1.0 #141 (huan)
  • Update README.md #139 (lijiarui)
  • qrcode #112 (lijiarui)
  • Update README.md #110 (lijiarui)
  • fixed javascript error: attempt is not defined #100 (JasLin)
  • convert wechaty-bro.js to plain old javascript syntax #60 #97 (cherry-geqi)

v0.6.0 (2016-11-11)

Full Changelog

Fixed bugs:

  • [Docker] Config.isDocker is not right in some Docker version / Linux distribution #84

v0.5.22 (2016-11-10)

Full Changelog

Implemented enhancements:

  • To Disable WebDriverJS promise manager for Selenium v3.0 #72
  • [Upgrade to v0.5] Convert code base to Typescript from Javascript #40

Closed issues:

  • can't run demo in docker under mac #80
  • 在windows下运行例子,npm 环境中,报错关于getChromeDriver() #77

v0.5.9 (2016-11-07)

Full Changelog

Closed issues:

  • run on windows.error #75

Merged pull requests:

  • fix: memberList Method have no 'name' argument defined ,it'will cause a undefined error. #78 (JasLin)
  • fix issue #70 #76 (JasLin)

v0.5.1 (2016-11-03)

Full Changelog

Implemented enhancements:

  • Dockerize Wechaty for easy start #66
  • Wechat帐号界面语言设为中文环境下:wechaty的room-join room-leave room-topic 事件无法触发 #52
  • test/fix Watchdog with browser dead & timeout conditions #47
  • use StateMonitor to record&check wechaty/puppet/bridge/browser state change #46
  • [New Feature] send message by branding new method: say() #41
  • [New Feature] Contact.{tag,star,remark,find,findAll} #34
  • [New Feature] FriendRequest class and event #33
  • [New Feature] Room.{create,addMember,delMember,quit,modTopic} support #32

Fixed bugs:

  • Just have a try as example of tuling bot. But method message.self() seems work improper. #68
  • 在cloud9中运行wechaty报错 #67
  • 当用户昵称中含有表情时,无法触发room-join 事件 #64
  • room-join 事件下,无法通过contact.id 方法获取contact_id #54
  • FriendRequest is not export to npm module #50

Closed issues:

  • Run wechaty occurs chromedriver is still running and the solution #62
  • Can't run wechaty with error log #61
  • [design] new class: BrowserCookie #59
  • 在room中通过room.topic()获取不到room的topic #55
  • 近期wechaty启动失败次数较多 #53
  • TSError: ⨯ Unable to compile TypeScript src/puppet-web/event.ts (120,12): Type 'PuppetWeb' is not assignable to type 'void'. (2322) #51
  • demo 无法运行 #49
  • Suggest give an api to get url #45
  • element_wrong----contact.get('name') got room name not contact name #43
  • webdrive login always occur error, for one success login always cost 4-5 log trys #42

v0.4.0 (2016-10-08)

Full Changelog

Implemented enhancements:

  • [Feature Request] Add friend(Contact) to a group(Room) #14
  • Support Friend Request / Contact Add & Del #6

Fixed bugs:

  • Wechaty account logout unexpectedly #37
  • google-chrome fails to start in docker #26
  • wx.qq.com detect phantomjs and disabled it #21

Closed issues:

  • get rid of PuppetWeb.initAttach #35
  • webdriver fail in docker when use ava (parallel tests mode) #27
  • WARN PuppetWebBridge init() inject FINAL fail #22
  • node-tap strange behaviour cause CircleCI & Travis-CI keep failing #11

Merged pull requests:

v0.2.0 (2016-06-28)

Full Changelog

v0.1.1 (2016-06-09)

Full Changelog

Fixed bugs:

  • ding-dong bot broken due to typo #5

v0.0.6 (2016-05-15)

Full Changelog

Closed issues:

  • selenium-webdriver & phantomjs-prebuilt not work together under win32 #1

Merged pull requests:

v0.0.5 (2016-05-11)

Full Changelog

* This Changelog was automatically generated by github_changelog_generator