tutorial,

微信群中的加密货币报价机器人

heygum heygum Follow Apr 01, 2021 · 4 mins read
微信群中的加密货币报价机器人

Powered by Wechaty

背景

当今正时大牛市 (或者牛快结束了), 在很多时候并没有办法打开App软件看币价, 比如在上课的时候, 在上班摸鱼的时候, 在地铁上的时候, 所以在微信群中,查询自己所需要的币的价格是很有必要的.

部署环境

Node.js16+ (目前不要上15的车)

TypeScript

qrcode-terminal wechaty wechaty-puppet-padlocal

在此项目中, 目前使用的是免费无限制的非小号API, 大致能用, 没上二线交易所以上的币一般没有.

本人运行环境 Debian 10.

实现

刚开始使用尝试的是python实现,后来遇到了连接不上的问题(搭了gateway也连不上), 后面使用Typescript实现时再次遇到了连接不上的问题.

后面发现是服务器的问题, 建议用服务器:

ping gateway.pad-local.com

尝试能不能ping通.

在此项目中,大致框架借鉴的是 wechaty-puppet-padlocal-demo, 在此基础上进行修改,在部署时可以先按着Demo进行操作.

Demo使用没问题时, 便可以进行二次修改.

// coinBot.ts
import { PuppetPadlocal } from "wechaty-puppet-padlocal";
import { Contact, log, Message, ScanStatus, Wechaty } from "wechaty";

const puppet = new PuppetPadlocal({
    token: "puppet_padlocal_yourTokenHere" // 输入你的token.
}) 

const bot = new Wechaty({
    name: "TestBot",
    puppet,
})

    .on("scan", (qrcode: string, status: ScanStatus) => {
        if (status === ScanStatus.Waiting && qrcode) {
            const qrcodeImageUrl = [
                'https://wechaty.js.org/qrcode/',
                encodeURIComponent(qrcode),
            ].join('')

            log.info("TestBot", `onScan: ${ScanStatus[status]}(${status}) - ${qrcodeImageUrl}`);

            require('qrcode-terminal').generate(qrcode, { small: true })  // show qrcode on console
        } else {
            log.info("TestBot", `onScan: ${ScanStatus[status]}(${status})`);
        }
    })

    .on("login", (user: Contact) => {
        log.info("TestBot", `${user} login`);
    })

    .on("logout", (user: Contact, reason: string) => {
        log.info("TestBot", `${user} logout, reason: ${reason}`);
    })

    .on("message", async (message: Message) => {
        if(message.text().toString().includes(".-")){  // 这里的反应前缀可以根据需求修改
            log.info(message.text().toString()); // 打印一下反应的Text.
            const s1 = message.text().toString().split("-")[1]; 
            let result = await coinBot(s1);
            const member = message.talker();
            if(result != null)
            {
                message.room().say("\n" + result,member);
            }
            else{
                log.info(message.toString());
                message.room().say("\n" + "没这币",member);
            }    
        };
    })

    .on("error", (error) => {
        log.error("TestBot", 'on error: ', error.stack);
    })

bot.start().then(() => {
    log.info("TestBot", "started.");
});

    async function coinBot(s1){
    var result;
    import rp  from 'request-promise';
    const requestOptions = {
    method: 'GET',
    uri: 'https://fxhapi.feixiaohao.com/public/v1/ticker', // 这里使用的非小号的API
    qs: {
    'start': '0',
    'limit': '5000',  //非小号最高数据5000
    'convert': 'USD'
    },
    json: true,
    gzip: true
    };

    let response = await rp(requestOptions);
    for(var each in response)
    {
        if(response[each]["symbol"].toLowerCase() == s1)
        {
            result = "[币种]: " + response[each]["symbol"] +`\n` + "[价格]: " +response[each]["price_usd"] + '\n' + "[24小时涨幅]: " + response[each]["percent_change_24h"] + "%";
            break;
        }
    }
    return result;
}

运行效果

效果图

致谢

谢谢Wechaty团队‘好大’的指导.

作者: heygum

Join Newsletter
Get the latest news right in your inbox. We never spam!
Written by heygum
在读IT留学生