微信自動問答腳本


去年年初寫的微信問答工具,現在版本是否支持不清楚,這里只是做一下記錄

源代碼

import threading                     # 導入模塊 3.7自帶 threading 無需安裝。
from ks import *                     #導入已經在文件夾的ks.pyd 模塊 ks 無需insatll
import urllib.request
import time
import random
import ssl

# from apscheduler.schedulers.background import BackgroundScheduler # 引入定時模塊

ssl._create_default_https_context = ssl._create_unverified_context  # 接口自簽名驗證拋錯 取消證書驗證
# url = 'http://api.tianapi.com/txapi/caihongpi/index?key=APIKEY'
chp_url = 'https://chp.shadiao.app/api.php' # 彩虹屁接口
zu_an_url = 'https://zuanbot.com/api.php?level=min&lang=zh_cn' # 祖安語錄
chp_send_count=1 # 一次發送的彩虹屁消息個數

game_power='開始游戲' # 游戲口令
players=[] # 所有玩家的信息
total_count= 5 # 總共需要答題數
questions_bank=[{title:'周郎計策安天下',answer:'賠了夫人又折兵'},{title:'九台壓路機壓壞了一台',answer:'八個壓路'},{title:'江東的百姓好脾氣',answer:'吳人能急'}]
# player=[{
#     id:'',
#     correct:0,
#     lastA:''
#     error:0,
#     total:0
# }] # 玩家信息 


# 請求方法
def requestText(_url):
    time.sleep(0.5) # 休眠0.5s

    req = urllib.request.Request(_url)

    resp = urllib.request.urlopen(req)
    content = resp.read()
    contentece=content.decode('utf-8') # 編碼輸出
    if(contentece):
        print(contentece)
        return contentece
    return 0

# questions_bank=[question,question]
# question:{ title:'題目',answer:'答案'}
def question(character):# 生成問題
    id =character.get('id')  # 玩家id
    count = character.get('count') # 所答對的問題數
    total = character.get('total')+1 # 所答題目總數
    character['total']=total
    r=random.randint(0,len(questions_bank)-1) # 隨機生成題目
    question="第"+total+"道" +".  "+ questions_bank[r].get('title')+"  下一句是?"
    print(question) # 輸出 發送題目
    fxx(id, question) # 發送題目
    character['lastA'] =questions_bank[r].get('answer') # 將題目答案保存在玩家信息中
    

def judgeExist(single){
    for i in range(len(players)):
        if players[i].get("id") == single:
            print("角色已存在")
            return i
    return -1 # 角色不存在        
}

def msgdata():                       #監聽消息實例 通過消息來判斷
    print("kaishi")
    msger = jtxx()                   #回調內部方法。如pycharm報紅色字體。可以忽視。照樣運行
    for data in msger:               #打印方法
        print(data)                  #這里回調所有消息。可以直接使用
        if data[0]=="msgdp":         #消息內容
            if data[5]=="0":         #1代表發送消息 0代表收到消息
                if data[2].find("@chatroom") == -1 and data[2][0:3].find("gh_") == -1: #排除 群里發的消息 公眾號收到的消息
                    
                    global players
                    print("私人消息")
                    seq = judgeExist(data[2]) # 判斷玩家是否存在,存在則返回下標,不存在則返回-1
                    if (data[6] == game_power) and (seq == -1):
                        pl = { 'id':data[2],'correct':0,'lastA':'','error':0,'total':0}  # 創建角色信息
                        players.append(pl) # 添加到游戲中
                        question(pl) # 生成問題
                        
                    if(seq !=-1):
                        if players[seq].get('lastA') ==data[6]: # 回答成功
                            players[seq]['correct']=players[seq].get('correct') +1 
                            str1 = '回答正確'
                            print(str1)
                            fxx(data[2],str1)

                        else:
                            # 回答錯誤 罵人
                            players[seq]['error']=players[seq].get('error') +1 
                            str2 = '回答錯誤,正確答案為'+players[seq].get('lastA')
                            print(str2)
                            status = requestText(zu_an_url)
                                print("消息是  ",status)
                                if status !=0:
                                    try:
                                        fxx(data[2], status)#發送消息 data[2]=微信id  text[0:100]=請求后的消息
                                    except:
                                        # print("你真棒!") 
                                        fxx(data[2], "這都是送分題啊!")
                                else:
                                        fxx(data[2], '網絡請求失敗')

                            

                        total = players[seq].get('correct') + players[seq].get('error')
                        if total == total_count: # 需要解答的題目已經解答完成

                            if players[seq].get('error') == 0 # 沒有答錯
                                print("贊美1次")
                                status = requestText(chp_url)
                                print("消息是  ",status)
                                if status !=0:
                                    try:
                                        fxx(data[2], status)#發送消息 data[2]=微信id  text[0:100]=請求后的消息
                                    except:
                                        # print("你真棒!") 
                                        fxx(data[2], "你真棒!")
                                else:
                                        fxx(data[2], '網絡請求失敗')

                                fxx(data[2], "五道題目全部正確!")
                                fxx(data[2],"答題結束")
                                players.pop(seq)
                                # 游戲結束 刪除角色
                            else: # 解答完成 但存在答錯的題目
                                c = players[seq].get('error')
                                for i in range(c):   
                                    status = requestText(zu_an_url)
                                    print("消息是  ",status)
                                    if status !=0:
                                        try:
                                            fxx(data[2], status)#發送消息 data[2]=微信id  text[0:100]=請求后的消息
                                        except:
                                            # print("你真棒!") 
                                            fxx(data[2], "這都是送分題啊!")
                                    else:
                                            fxx(data[2], '網絡請求失敗')
                                
                                fxx(data[2], "五道題目全部完成")
                                fxx(data[2],"答題結束")
                                players.pop(seq)

                        else: # 繼續生成題目
                                question(players[seq])


threading.Thread(target=msgdata).start()#多線程收消息 處理
input("啟動微信")

PS: 代碼邏輯好像沒寫完,懶得寫了。

最后

相關鏈接:
微信自動回復彩虹屁或祖安語錄

原作者github項目地址為:
wechat-pc-hook3.0.0.57


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM