HOME 首頁(yè)
SERVICE 服務(wù)產(chǎn)品
XINMEITI 新媒體代運(yùn)營(yíng)
CASE 服務(wù)案例
NEWS 熱點(diǎn)資訊
ABOUT 關(guān)于我們
CONTACT 聯(lián)系我們
創(chuàng)意嶺
讓品牌有溫度、有情感
專注品牌策劃15年

    itchat打開(kāi)聊天(打開(kāi)聊天的英文)

    發(fā)布時(shí)間:2023-03-13 07:53:15     稿源: 創(chuàng)意嶺    閱讀: 138        問(wèn)大家

    大家好!今天讓創(chuàng)意嶺的小編來(lái)大家介紹下關(guān)于itchat打開(kāi)聊天的問(wèn)題,以下是小編對(duì)此問(wèn)題的歸納整理,讓我們一起來(lái)看看吧。

    ChatGPT國(guó)內(nèi)免費(fèi)在線使用,一鍵生成原創(chuàng)文章、方案、文案、工作計(jì)劃、工作報(bào)告、論文、代碼、作文、做題和對(duì)話答疑等等

    只需要輸入關(guān)鍵詞,就能返回你想要的內(nèi)容,越精準(zhǔn),寫出的就越詳細(xì),有微信小程序端、在線網(wǎng)頁(yè)版、PC客戶端

    官網(wǎng):https://ai.de1919.com

    本文目錄:

    itchat打開(kāi)聊天(打開(kāi)聊天的英文)

    一、itchat生成二維碼不成形

    ItChat是一個(gè)基于微信協(xié)議的Python庫(kù),用于快速開(kāi)發(fā)微信個(gè)人賬號(hào)機(jī)器人和微信群自動(dòng)管理程序。生成二維碼是微信客戶端登錄認(rèn)證的一部分,通常情況下,ItChat庫(kù)能夠生成正確的二維碼。但是,如果生成的二維碼出現(xiàn)形狀不正的問(wèn)題,可能與以下幾個(gè)問(wèn)題有關(guān):

    1. 由于網(wǎng)絡(luò)問(wèn)題或微信協(xié)議限制,ItChat無(wú)法連接微信服務(wù)端導(dǎo)致二維碼生成失敗

    2. 本地環(huán)境存在問(wèn)題,例如操作系統(tǒng)缺少必要的庫(kù)文件,或者ItChat庫(kù)版本過(guò)低

    3. 用戶的微信賬號(hào)安全級(jí)別較高,微信服務(wù)器需要較長(zhǎng)的時(shí)間進(jìn)行身份驗(yàn)證,導(dǎo)致二維碼長(zhǎng)時(shí)間處于加載中的狀態(tài)

    如果遇到生成二維碼不成形的問(wèn)題,可以嘗試檢查網(wǎng)絡(luò)連接狀態(tài)、更新ItChat庫(kù)版本,或者嘗試等待一段時(shí)間再重新嘗試登錄認(rèn)證。如果問(wèn)題仍然無(wú)法解決,可以嘗試查看ItChat的官方文檔或者加入開(kāi)源社區(qū)向其他開(kāi)發(fā)者求助。

    二、基于wechaty的定時(shí)消息推送(可以哄女朋友)、智能聊天和私人助理

    ---

    title: "基于wechaty的定時(shí)消息推送(可以哄女朋友)、智能聊天和私人助理"

    author: jasonlovesharon

    email: 54027901@163.com

    tags:

      - nodejs

      - wechaty

      - wechaty-puppet-padplus

    ---

    ## 前言

    - 自從2017年微信web端API限制以后,itchat等一大批bot歇菜了,一直都在找一款合適的替品

    - 目前來(lái)看,大部分都是針對(duì)windows微信客戶端,基于HOOK的dll注入實(shí)現(xiàn)對(duì)微信的操控,有一定的封號(hào)風(fēng)險(xiǎn),只能用固定的版本,部署在linux服務(wù)器端比較困難,意味著只能一直開(kāi)著電- -wechaty,支持IPAD,,MAC等多種協(xié)議,不用去調(diào)用WEB網(wǎng)頁(yè)API,并且可以布署在服務(wù)器,滿足我所有需求。[項(xiàng)目地址](https://github.com/wechaty/wechaty)

    - 看完官方文檔后([token官方介紹](https://github.com/juzibot/welcome/wiki/everything-about-wechaty)), 發(fā)現(xiàn)需要申請(qǐng)Token,并且python版本的Token是要付費(fèi)的,但沒(méi)有學(xué)過(guò)typescript,有點(diǎn)想放棄,瀏覽了一下ding-dong-bot的Example,似乎可以看懂,那就邊學(xué)習(xí)邊摸索吧。(ps:后來(lái)偶然見(jiàn)發(fā)現(xiàn)了另一篇可以使用將token轉(zhuǎn)變一下實(shí)現(xiàn)python版wechaty,但此時(shí)已經(jīng)基本用TS寫完了,如果想用Python等其他語(yǔ)言可以參考[官方文檔](https://github.com/wechaty/wechaty/issues/1985)。)

    ## 具備功能

    ### 1. 關(guān)鍵詞觸發(fā)功能

    1.1 關(guān)鍵詞"介紹一下自己"、 "自我介紹一下"、 "你是誰(shuí)"觸發(fā)自我介紹

    1.2 地名+天氣 觸發(fā)天氣查詢

    ### 2. 智能聊天功能

    2.1群外直接聊天

    2.2群內(nèi)成員皆有聊天權(quán)限“@bot” 聊天

    2.3不會(huì)回復(fù) @其他群成員 的消息

    ## 實(shí)現(xiàn)過(guò)程

    Talk is cheap,show your code

    ### 1. 主程序

    ```typescript

    import { Wechaty, Message, UrlLink,log,} from 'wechaty'

    import { PuppetPadplus } from 'wechaty-puppet-padplus'

    import { EventLogger, QRCodeTerminal } from 'wechaty-plugin-contrib'

    import { WechatyWeixinOpenAI, } from 'wechaty-weixin-openai'

    import { setSchedule, } from './schedule/index'

    import { getDay, formatDate,} from './utils/index'

    import { getOne, getTXweather, getSweetWord,} from './superagent/index'

    // 創(chuàng)建微信每日說(shuō)定時(shí)任務(wù)

    async function initDay() {

      console.log(`已經(jīng)設(shè)定每日說(shuō)任務(wù)`);

      setSchedule('0 40 0 * * *', async () => {

        console.log('你的貼心小助理開(kāi)始工作啦!')

        let logMsg

        let contact =

          (await bot.Contact.find({ name: 'Jason' })) ||

          (await bot.Contact.find({ alias: 'boss' })) // 獲取你要發(fā)送的聯(lián)系人

        let one = await getOne() //獲取每日一句

        let weather = await getTXweather() //獲取天氣信息

        let today = await formatDate(new Date()) //獲取今天的日期

        let memorialDay = getDay('2009/08/07') //獲取紀(jì)念日天數(shù)

        let sweetWord = await getSweetWord()

        let str = `${today}\n我們相愛(ài)的第${memorialDay}天\n\n元?dú)鉂M滿的一天開(kāi)始啦,要開(kāi)心噢^_^\n\n今日天氣\n${weather.weatherTips}\n${

          weather.todayWeather

        }\n每日一句:<br>${one}<br><br>每日土味情話:<br>${sweetWord}<br><br>————————最愛(ài)你的我`

        try {

          logMsg = str

          await delay(2000)

          await contact.say(str) // 發(fā)送消息

        } catch (e) {

          logMsg = e.message

        }

        console.log(logMsg)

      })

    }

    const padplusToken = '你自己的TOKEN'

    const puppet = new PuppetPadplus({

      token: padplusToken,

    })

    const bot = new Wechaty({

      name: 'jason-assistant',

      puppet,

    })

    bot.use(EventLogger())

    bot.use(QRCodeTerminal({ small: true }))

    //在Wechaty里面引用和配置插件

    const openAIToken = '你自己的機(jī)器人TOKEN' //需要在微信對(duì)話開(kāi)放平臺(tái)申請(qǐng),點(diǎn)擊機(jī)器人設(shè)置》綁定應(yīng)用》在頁(yè)面最下方即可看到

    const openAIEncodingAESKey = '你自己的EncodingAESKey' //微信對(duì)話開(kāi)放平臺(tái)申請(qǐng),點(diǎn)擊機(jī)器人設(shè)置》綁定應(yīng)用》在頁(yè)面最下方即可看到

    const preAnswerHook = async (message: Message) => {

      const isCommonMaterial = await processCommonMaterial(message)

      if (isCommonMaterial) {

        return false

      }

    }

    /**

    * 獲得boss聯(lián)系名片,當(dāng)機(jī)器人找不到問(wèn)題答案時(shí),將BOSS的名片推送過(guò)去

    */

    const getBoss = async () => {

        const contact = bot.Contact.load('boss微信ID')

        await contact.sync()

        return contact

      }

      const noAnswerHook = async (message: Message) => {

        const room = message.room()

        const from = message.from()

        if (!room) {

          const boss = await getBoss()

          await message.say('你的問(wèn)題我不會(huì)回答,你可以聯(lián)系我的老板')

          await message.say(boss)

          return;

        }

        const members = await room.memberAll()

        const bossInRoom = members.find(m => m.id === 'boss微信id')

        if (bossInRoom) {

          await room.say`${bossInRoom},${from}問(wèn)的問(wèn)題我不知道,你幫我回答一下吧。`

        } else {

          const boss = await getBoss()

          await room.say`${from},你的問(wèn)題我不會(huì)回答,你可以聯(lián)系我的老板`

          await room.say(boss)

        }

      }

    /**

    * 用wechaty-weixin-openai可以實(shí)現(xiàn)快速接入微信對(duì)話平臺(tái)

    */

    bot.use(WechatyWeixinOpenAI({

        token: openAIToken,

        encodingAESKey: openAIEncodingAESKey,

        noAnswerHook, //在機(jī)器人無(wú)法回答時(shí),推送設(shè)定的回答

        preAnswerHook, //判斷是否是關(guān)鍵字,如果是關(guān)鍵字,觸發(fā)關(guān)鍵字回答而不接入微信開(kāi)放平臺(tái)

      }))

    const processCommonMaterial = async (message: Message) => {

        const room = message.room()

        // const from = message.from()

        const mentionSelf = await message.mentionSelf()

        const text = message.text()

        let intro = 'Jason,愛(ài)好廣泛,廣交天下豪杰,上得了九天摘月,下得了五洋捉鱉,俗話說(shuō)的好,不會(huì)烘培的飛行員不是好戶外人,不會(huì)玩音樂(lè)的水族愛(ài)好者不是好廚師,不會(huì)畫畫的極限愛(ài)好者不是好程序員,這就是我的老板Jason,吼吼吼~~'

        if (room !== null && mentionSelf) {

          if (/jason|你老板|你上司/.test(text)) {

            await room.say(intro)

            await room.say(new UrlLink({

                description: '戶外賤客 & Fighting,fighting,finghting and finghting,讀萬(wàn)卷書,行萬(wàn)里路,學(xué)習(xí)AND吃,喝,玩,樂(lè)',

                thumbnailUrl: '',

                title: 'Jason',

                url: 'http://mp.weixin.qq.com/s?__biz=MzkxODE3MjAyNQ==&mid=100000001&idx=1&sn=d05de320c6fbe6c9f9149a09a4da81ec&chksm=41b4391776c3b001c143ac2c284c58ac8b08de41d95cab682aa5a07022e32096567f5780d5be#rd',

              }))

            return true

          } else if (/戶外賤客/.test(text)) {

            await room.say(new UrlLink({

                description: '戶外賤客 & Fighting,fighting,finghting and finghting,讀萬(wàn)卷書,行萬(wàn)里路,學(xué)習(xí)AND吃,喝,玩,樂(lè)',

                thumbnailUrl: '',

                title: 'Jason',

                url: 'http://mp.weixin.qq.com/s?__biz=MzkxODE3MjAyNQ==&mid=100000001&idx=1&sn=d05de320c6fbe6c9f9149a09a4da81ec&chksm=41b4391776c3b001c143ac2c284c58ac8b08de41d95cab682aa5a07022e32096567f5780d5be#rd',

              }))

            return true

          }

        }

        return false

    }

    // 登錄

    async function onLogin(user) {

      console.log(`貼心小助理${user}登錄了`)

      // 登陸后創(chuàng)建定時(shí)任務(wù)

      await initDay()

    }

    bot.on('login', onLogin)

    bot.start()

      .then(() => log.info('StarterBot', 'Starter Bot Started.'))

      .catch(e => log.error('StarterBot', e))

    ```

    ### 2.創(chuàng)建schedule定時(shí)函數(shù)

    ```typescript

    import { schedule } from 'node-schedule'

    // date 參數(shù)

    //其他規(guī)則見(jiàn) https://www.npmjs.com/package/node-schedule

    // 規(guī)則參數(shù)講解    *代表通配符

    //

    // *  *  *  *  *  *

    // ┬ ┬ ┬ ┬ ┬ ┬

    // │ │ │ │ │  |

    // │ │ │ │ │ └ day of week (0 - 7) (0 or 7 is Sun)

    // │ │ │ │ └───── month (1 - 12)

    // │ │ │ └────────── day of month (1 - 31)

    // │ │ └─────────────── hour (0 - 23)

    // │ └──────────────────── minute (0 - 59)

    // └───────────────────────── second (0 - 59, OPTIONAL)

    // 每分鐘的第30秒觸發(fā): '30 * * * * *'

    //

    // 每小時(shí)的1分30秒觸發(fā) :'30 1 * * * *'

    //

    // 每天的凌晨1點(diǎn)1分30秒觸發(fā) :'30 1 1 * * *'

    //

    // 每月的1日1點(diǎn)1分30秒觸發(fā) :'30 1 1 1 * *'

    //

    // 每周1的1點(diǎn)1分30秒觸發(fā) :'30 1 1 * * 1'

    function setSchedule(date,callback) {

      schedule.scheduleJob(date, callback)

    }

    export function setSchedule()

    ```

    ### 3.創(chuàng)建幾個(gè)功能函數(shù),爬取ONE網(wǎng)站的每日一句,提取通過(guò)API獲取的消息

    ```typescript

    import * as cheerio from 'cheerio'

    import * as superagent from 'superagent'

    const ONE = 'http://wufazhuce.com/' // ONE的web版網(wǎng)站

    const TXHOST = 'http://api.tianapi.com/txapi/' // 天行host

    function req(url,method, params, data, cookies) {

      return new Promise(function (resolve,reject) {

        superagent(method, url)

          .query(params)

          .send(data)

          .set('Content-Type','application/x-www-form-urlencoded')

          .end(function (err, response) {

            if (err) {

            reject(err)

            }

            resolve(response)

          })

        })

    }

    async function getOne() {

      // 獲取每日一句

      try {

        let res = await req(ONE, 'GET')

        let $ = cheerio.load(res.text)

        let todayOneList = $('#carousel-one .carousel-inner .item')

        let todayOne = $(todayOneList[0])

          .find('.fp-one-cita')

          .text()

          .replace(/(^\s*)|(\s*$)/g, '')

        return todayOne

      } catch (err) {

        console.log('錯(cuò)誤', err)

        return err

      }

    }

    async function getTXweather() {

      // 獲取天行天氣

      let url = TXHOST + 'tianqi/'

      try {

        let res = await req(url, 'GET', {

          key: '你自己的KEY',//需要自己去天行申請(qǐng),地址https://www.tianapi.com/signup.html?source=474284281

          city: 'Arlington'

        })

        let content = JSON.parse(res.text)

        if (content.code === 200) {

          let todayInfo = content.newslist[0]

          let obj = {

            weatherTips: todayInfo.tips,

            todayWeather:`阿林頓今天${todayInfo.weather}\n溫度:${todayInfo.lowest}/${todayInfo.highest}

            \n${todayInfo.wind}風(fēng): ${todayInfo.windspeed}\n紫外線指數(shù):${todayInfo.uv_index}\n濕度

            ${todayInfo.humidity}`

          };

          console.log('獲取天行天氣成功', obj)

          return obj

        } else {

          console.log('獲取接口失敗', content.code)

        }

      } catch (err) {

        console.log('獲取接口失敗', err)

      }

    }

    async function getSweetWord() {

      // 獲取土味情話

      let url = TXHOST + 'saylove/'

      try {

        let res = await req(url, 'GET', { key: '' })

        let content = JSON.parse(res.text)

        if (content.code === 200) {

          let sweet = content.newslist[0].content

          let str = sweet.replace('\r\n', '<br>')

          return str

        } else {

          console.log('獲取接口失敗', content.msg)

        }

      } catch (err) {

        console.log('獲取接口失敗', err)

      }

    }

    export { getOne, getTXweather, getSweetWord, }

    ```

    ### 計(jì)算距離某日(生日,結(jié)婚紀(jì)念日等)還有多少天

    ```typescript

    function getDay(date) {

      var date2 = new Date()

      var date1 = new Date(date)

      var iDays = parseInt(

        Math.abs(date2.getTime() - date1.getTime()) / 1000 / 60 / 60 / 24

      )

      return iDays

    }

    function formatDate(date) {

      var tempDate = new Date(date)

      var year = tempDate.getFullYear()

      var month = tempDate.getMonth() + 1

      var day = tempDate.getDate()

      var hour = tempDate.getHours()

      var min = tempDate.getMinutes()

      var second = tempDate.getSeconds()

      var week = tempDate.getDay()

      var str = ''

      if (week === 0) {

        str = '星期日'

      } else if (week === 1) {

        str = '星期一'

      } else if (week === 2) {

        str = '星期二'

      } else if (week === 3) {

        str = '星期三'

      } else if (week === 4) {

        str = '星期四'

      } else if (week === 5) {

        str = '星期五'

      } else if (week === 6) {

        str = '星期六'

      }

      if (hour < 10) {

        hour = '0' + hour

      }

      if (min < 10) {

        min = '0' + min

      }

      if (second < 10) {

        second = '0' + second

      }

      return year + '-' + month + '-' + day + '日 ' + hour + ':' + min + ' ' + str

    }

    export { getDay, formatDate }

    ```

    ![關(guān)鍵字觸發(fā)消息](https://wechaty.js.org/assets/2020/daily-message-and-chatbot/keyword-push.png)

    ![無(wú)法回答推送名片](https://wechaty.js.org/assets/2020/daily-message-and-chatbot/push-contact.png)

    ![定時(shí)推送消息](https://wechaty.js.org/assets/2020/daily-message-and-chatbot/daily-message.png)

    ![智能聊天](https://wechaty.js.org/assets/2020/daily-message-and-chatbot/talk-to-bot.png)

    ## 后記

    到此已經(jīng)實(shí)現(xiàn)了私人人助理和定時(shí)推送消息的功能([項(xiàng)目地址](https://github.com/jasonlovesharon/my_bot)),由于對(duì)Typescript不熟,很多功能都是借鑒很多大神的輪子實(shí)現(xiàn)的,還是對(duì)Python熟悉點(diǎn),下步準(zhǔn)備用Python來(lái)實(shí)現(xiàn)以上功能,并進(jìn)一步拓展更多有趣的功能。

    三、如何用你的專業(yè)知識(shí)向心愛(ài)的人表白?

    用各種化學(xué)和數(shù)學(xué)方程式來(lái)表白。

    1.Mg十ZnSo4==MgSo4+Zn:

    女:“為什么喜歡我”?

    男:“因?yàn)橐粋€(gè)化學(xué)方程式”。

    女:“什么?”

    男:“你的鎂奪走了我的鋅”。

    2. 6HF+SiO2=H2SiF6+2H2O:

    二氧化硅的性質(zhì)不活潑,它不與除氟、氟化氫以外的鹵素、鹵化氫以及硫酸、硝酸、高氯酸作用(熱濃磷酸除外)。你是氫氟酸 我是二氧化硅。我愿溶入你的骨血,好比二氧化硅在常溫下獨(dú)溶于氫氟酸,只此唯一。 

    itchat打開(kāi)聊天(打開(kāi)聊天的英文)

    3. 2 H2O2==MnO2(催化劑)==2 H2O+O2↑:

    我就像過(guò)氧化氫反應(yīng)中的二氧化錳一樣,即使世界支離破碎,但我對(duì)你的堅(jiān)守永不減少。

    4.H2+O2=H2O:

    我是氫離子,你是氫氧根離子,我倆在一起就是生命之源H2O。

    5.親愛(ài)的,你是我的誘導(dǎo)公式。沒(méi)有你,我永遠(yuǎn)不會(huì)靈活變通。

    6.親愛(ài)的,我是sin,你是cos。沒(méi)有你,tan沒(méi)有意義。

    7.親愛(ài)的,你是我的坐標(biāo)系。沒(méi)有你,我永遠(yuǎn)無(wú)法找到自己的位置。

    itchat打開(kāi)聊天(打開(kāi)聊天的英文)

    8.親愛(ài)的,你是我的元素。沒(méi)有你,我的集合永遠(yuǎn)只是個(gè)空集。

    9.親愛(ài)的,你是我的算法。沒(méi)有你,我永遠(yuǎn)無(wú)法找到自己的價(jià)值。

    10.親愛(ài)的,你是我的線性回歸方程。沒(méi)有你,我永遠(yuǎn)只是一些迷途的散點(diǎn),沒(méi)有主心骨。

    11.親愛(ài)的,你是我的單調(diào)遞增函數(shù)。有了你,我的快樂(lè)一天勝過(guò)一天。

    12.親愛(ài)的,你是我的通項(xiàng)公式。沒(méi)有你,我永遠(yuǎn)無(wú)法認(rèn)清自己。

    13.親愛(ài)的,你是A,我是X。沒(méi)有你,A的X次方永遠(yuǎn)無(wú)法恒大于零。

    itchat打開(kāi)聊天(打開(kāi)聊天的英文)

    14.親愛(ài)的,你是我的定義域。沒(méi)有你,我的函數(shù)的存在毫無(wú)意義。

    15.親愛(ài)的,你是我的對(duì)稱軸。沒(méi)有你,我永遠(yuǎn)找不到我的另一半。

    16.親愛(ài)的,你是我的充要條件。沒(méi)有你,推不出我。沒(méi)有我,推不出你。故我倆相依相存!

    17.親愛(ài)的,你是P,我是Q。沒(méi)有你,P且Q永遠(yuǎn)只是一個(gè)假命題。

    18.親愛(ài)的,你是我的斜率。沒(méi)有你,我永遠(yuǎn)無(wú)法找到正確的方向。

    19.親愛(ài)的,你是我的標(biāo)準(zhǔn)型。沒(méi)有你,我永遠(yuǎn)無(wú)法發(fā)現(xiàn)我的max,min,T,(faei),(omiga)。

    20.親愛(ài)的,綜上所述:我和你在一起的概率為1。

    四、微信客戶咨詢量很大,回復(fù)不過(guò)來(lái)有什么軟件能回復(fù)更方便呢?

    如果你是手機(jī)的話,我比較推薦使用電腦,當(dāng)多人聊天的時(shí)候,還是電腦速度比較快u快的,記住不要使用網(wǎng)頁(yè)版,如果你是手機(jī)的話,我比較推薦使用電腦,當(dāng)多人聊天的時(shí)候,還是電腦速度比較快u快的,記住不要使用網(wǎng)頁(yè)版,功能不全!望采納!感謝!!望采納!感謝!

    以上就是關(guān)于itchat打開(kāi)聊天相關(guān)問(wèn)題的回答。希望能幫到你,如有更多相關(guān)問(wèn)題,您也可以聯(lián)系我們的客服進(jìn)行咨詢,客服也會(huì)為您講解更多精彩的知識(shí)和內(nèi)容。


    推薦閱讀:

    wait現(xiàn)在分詞怎么寫(wait的現(xiàn)在分詞怎么讀)

    英語(yǔ)詞根cit

    ChatGPT和程序員(程序員跟it)

    POTATO攜手A.TOP亞交所打造全球社交公鏈

    杭州第六空間家居西溪館(杭州第六空間西溪店)