Skip to main content

Tuling 123 Bot

Powered by Wechaty JavaScript

Tuling bot is a bot which can talk with you using Tuling123.com.

This tutorial is a demonstration of how to use this bot.

Try out the bot

Edit wechaty-tuling123-bot

You can try out the Tuling123 bot using this interactive CodeSandbox.

Just scan the generated QR code with WeChat app, and you are ready to play with the bot!

Requirements

  1. Node.js v16+
  2. Wechaty v0.40+

Getting started

You should have Node.js installed on your system. If you do not have Node.js installed (or have a version below 12), then you need to install the latest version of Node.js by following the links below:

Node.js installation docs

Installation guide for Node.js on other platforms can be found here.

You can head over to the Building the bot section to learn how to build the bot on your own.

Otherwise, if you just want to try out the bot on your local system, follow the steps below:

1. Clone the repository

Use the following commands to clone the GitHub repository and navigate to the directory:

git clone https://github.com/wechaty/wechaty-getting-started.git
cd wechaty-getting-started

2. Install dependencies

You can install the npm packages required for running the bot, using this command:

npm install

3. Run the bot

You have to export/set the environment variables:

export WECHATY_LOG=verbose
export WECHATY_PUPPET=wechaty-puppet-wechat

There are various Wechaty puppets available, you can know more about them here.

Run the bot by using the following command:

node examples/professional/tuling123-bot.js

It will generate a QR code, scan it using WeChat or WhatsApp (according to the puppet you have used), and you are ready to play with the bot.

Building the bot

Let's get started with building the Tuling bot using Wechaty.

1. Initialize project

Create a new folder called tuling-bot and move into that directory:

mkdir tuling-bot
cd tuling-bot

Use the following command to initialize an npm project:

npm init -y

2. Install dependencies

You will need the wechaty NPM package for building this bot, qrcode-terminal for displaying the QR code that can be scanned for using the bot and tuling123-client for connecting to tuling bot. Install them using the following command:

npm install wechaty
npm install qrcode-terminal tuling123-client

You will also need to add dependencies for using any Wechaty Puppet which helps to integrate Wechaty with various instant messaging (IM) systems (such as WeChat, WhatsApp, and WeCom):

  1. If you want to use WhatsApp, install wechaty-puppet-whatsapp:

    npm install wechaty-puppet-whatsapp
  2. If you want to use WeChat, you can try the following puppets:

  • Web Protocol: Install wechaty-puppet-wechat:

    npm install wechaty-puppet-wechat
  • iPad Protocol:

    • padlocal: Install wechaty-puppet-padlocal:
    npm install wechaty-puppet-padlocal

    Then get a token like puppet_padlocal_XXX, know more about puppet service padlocal here.

    • paimon: Install wechaty-puppet-service:
    npm install wechaty-puppet-service

    Then get a token like puppet_paimon_XXX, know more about puppet service paimon here.

  1. If you want to use WeCom, install wechaty-puppet-service:

    npm install wechaty-puppet-service

    Then get a token like puppet_wxwork_XXXXX, more about puppet service wxwork here.

You can find more information about the puppets here.

3. Write code for bot

Start by creating a new file tuling-bot.js. We will be writing the code here.

Let's import the required packages in the JavaScript file:

import qrTerm  from 'qrcode-terminal'
import Tuling123 from 'tuling123-client'

const {
Wechaty,
Message,
} = require('wechaty')

const welcome = `
=============== Powered by Wechaty ===============
-------- https://github.com/Chatie/wechaty --------

I can talk with you using Tuling123.com
Apply your own tuling123.com API_KEY
at: http://www.tuling123.com/html/doc/api.html

__________________________________________________

Please wait... I'm trying to login in...
`

console.log(welcome)

Apply Your Own Tuling123 Developer API_KEY at tuling123.com

const TULING123_API_KEY = '18f25157e0446df58ade098479f74b21'
const tuling = new Tuling123(TULING123_API_KEY)

Initializing the bot by providing it a name

const bot = new Wechaty()

Assigning proper functions to call when an event is triggered by the bot:

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

Specify some functions that you will require for handling different events returned by the tuling bot.

  • onScan

    This function will be used for generating the QR code for the puppet specified, and display it on the console.

    function onScan (qrcode, status) {
    qrTerm.generate(qrcode, { small: true }) // show qrcode on console
    }
  • onLogin

    This will print a log message when an user logs in to the bot.

    function onLogin (user) {
    console.log(`${user} login`)
    }
  • onLogout

    This will print a log message when an user logs out of the bot.

    function onLogout (user) {
    console.log(`${user} logout`)
    }
  • onError

    This is for printing an error message to the console.

    function onError (e) {
    console.error(e)
    }
  • onMessage

    This is the main function which will handle the messaging service.

    async function onMessage (msg) {
    // Skip message from self, or inside a room
    if (msg.self() || msg.room() || msg.from().name() === '微信团队' || msg.type() !== Message.Type.Text) return

    console.log('Bot', 'talk: %s' , msg.text())

    try {
    const {text: reply} = await tuling.ask(msg.text(), {userid: msg.from()})
    console.log('Tuling123', 'Talker reply:"%s" for "%s" ',
    reply,
    msg.text(),
    )
    await msg.say(reply)
    } catch (e) {
    console.error('Bot', 'on message tuling.ask() exception: %s' , e && e.message || e)
    }
    }

Finally, for starting the bot

bot.start()
.catch(console.error)

Running the bot

In order to run the bot, first you have to export/set an environment variable with the type of puppet to use:

export WECHATY_LOG=verbose
export WECHATY_PUPPET=wechaty-puppet-wechat

# For using WhatsApp:
# export WECHATY_PUPPET=wechaty-puppet-whatsapp

# For using WeCom:
# export WECHATY_PUPPET=wechaty-puppet-service
# export WECHATY_PUPPET_SERVICE_TOKEN="puppet_wxwork_XXXXX"

If you are using WeCom, you can get token from puppet service wxwork.

Run the bot using the following command:

npx ts-node tuling-bot.js

This will start the bot and generate a QR code.

Scan it using your WeChat/WhatsApp as per the puppet you have selected, and you are ready to play with the bot!

References