chatgpt-on-wechat icon indicating copy to clipboard operation
chatgpt-on-wechat copied to clipboard

切换wechaty报错

Open Chiaki-Chan opened this issue 2 years ago • 4 comments

前置确认

  1. 网络能够访问openai接口 #351
  2. python 已安装:版本在 3.7 ~ 3.10 之间,依赖已安装
  3. 在已有 issue 中未搜索到类似问题
  4. FAQS 中无类似问题

问题描述

修改app.py中的channel采用wxy,报错; 已经安装wechaty依赖;

终端日志 (如有报错)

[ERROR][2023-03-10 11:22:40][app.py:19] - App startup failed! [ERROR][2023-03-10 11:22:40][app.py:20] - str expected, not NoneType Traceback (most recent call last): File "/Volumes/Data/Code/Haoyuan/ChatGPT/chatgpt-on-wechat/app.py", line 17, in channel.startup() File "/Volumes/Data/Code/Haoyuan/ChatGPT/chatgpt-on-wechat/channel/wechat/wechaty_channel.py", line 28, in startup asyncio.run(self.main()) File "/usr/local/Cellar/[email protected]/3.9.10/Frameworks/Python.framework/Versions/3.9/lib/python3.9/asyncio/runners.py", line 44, in run return loop.run_until_complete(main) File "/usr/local/Cellar/[email protected]/3.9.10/Frameworks/Python.framework/Versions/3.9/lib/python3.9/asyncio/base_events.py", line 642, in run_until_complete return future.result() File "/Volumes/Data/Code/Haoyuan/ChatGPT/chatgpt-on-wechat/channel/wechat/wechaty_channel.py", line 34, in main os.environ['WECHATY_PUPPET_SERVICE_TOKEN'] = token File "/usr/local/Cellar/[email protected]/3.9.10/Frameworks/Python.framework/Versions/3.9/lib/python3.9/os.py", line 684, in setitem value = self.encodevalue(value) File "/usr/local/Cellar/[email protected]/3.9.10/Frameworks/Python.framework/Versions/3.9/lib/python3.9/os.py", line 756, in encode raise TypeError("str expected, not %s" % type(value).name) TypeError: str expected, not NoneType

环境

  • 操作系统类型 (Mac/Windows/Linux):Mac
  • Python版本 ( 执行 python3 -V ): 3.9
  • pip版本 ( 依赖问题此项必填,执行 pip3 -V):

Chiaki-Chan avatar Mar 10 '23 03:03 Chiaki-Chan

好吧,我找到原因了,是config.json中缺了“wechaty_puppet_service_token”,这要去wechaty官网注册一个

Chiaki-Chan avatar Mar 10 '23 03:03 Chiaki-Chan

又有新的报错了: Traceback (most recent call last): File "/usr/local/lib/python3.9/site-packages/wechaty/wechaty.py", line 445, in start await self.puppet.start() File "/usr/local/lib/python3.9/site-packages/wechaty_puppet_service/puppet.py", line 911, in start self._init_puppet() File "/usr/local/lib/python3.9/site-packages/wechaty_puppet_service/puppet.py", line 876, in _init_puppet raise WechatyPuppetGrpcError( wechaty_puppet.exceptions.WechatyPuppetGrpcError: WechatyPuppetGrpcError('can"t fetch endpoint from chatie server. You can try it later, or make sure that your pc can connect to heroku server ', None, None)

Chiaki-Chan avatar Mar 10 '23 03:03 Chiaki-Chan

@chiakileftcang 解决了吗?我也出现这个错误了

frankchn-x avatar Mar 10 '23 15:03 frankchn-x

@chiakileftcang 解决了吗?我也出现这个错误了

还没有哎,找不到原因

Chiaki-Chan avatar Mar 12 '23 09:03 Chiaki-Chan

@chiakileftcang 解决了吗?我也出现这个错误了

我大概知道怎么回事了。 这需要自建一套wechaty的环境; 这是我写的一个运行docker容器的脚本(wechaty.sh): #!/bin/bash PWD=$(cd ``dirname $0``;pwd); IMG_NAME='wechaty/wechaty' IMG_VER='0.65' PORT=8080 NAME='wechaty-getway' export WECHATY_LOG="verbose" export WECHATY_PUPPET="wechaty-puppet-padlocal" export WECHATY_PUPPET_PADLOCAL_TOKEN="puppet_padlocal_0000000000000000000" # 这里输入你自己的token export WECHATY_PUPPET_SERVER_PORT="8080" export WECHATY_TOKEN="myhosttoken123" if [ $# -gt 1 ];then NAME=$2 fi if [ $# -gt 2 ];then PORT=$3 fi if [ $# -gt 3 ];then WECHATY_PUPPET_PADLOCAL_TOKEN=$4 export WECHATY_PUPPET_PADLOCAL_TOKEN=$4 fi if [ $# -gt 4 ];then WECHATY_TOKEN=$5 export WECHATY_TOKEN=$5 fi VPATH="" EXEC="--rm -e WECHATY_LOG -e WECHATY_PUPPET -e WECHATY_PUPPET_PADLOCAL_TOKEN -e WECHATY_PUPPET_SERVER_PORT -e WECHATY_TOKEN" `run() {` ` echo -e docker run --name $NAME -p $PORT:$PORT $EXEC $VPATH -d $IMG_NAME:$IMG_VER` ` docker run --name $NAME -p $PORT:$PORT $EXEC $VPATH -d $IMG_NAME:$IMG_VER` `}` case $1 in pull) echo -e docker pull ${IMG_NAME}:${IMG_VER} docker pull ${IMG_NAME}:${IMG_VER} exit $? ;; build) echo -e docker build -t ${IMG_NAME}:${IMG_VER} . docker build -t ${IMG_NAME}:${IMG_VER} . exit $? ;; start) echo -e docker start $NAME docker start $NAME exit $? ;; stop) echo -e docker stop $NAME docker stop $NAME exit $? ;; restart) echo -e docker stop $NAME echo -e docker start $NAME docker stop $NAME docker start $NAME exit $? ;; restarta) echo -e docker stop $NAME echo -e docker rm $NAME echo -e docker rmi $IMG_NAME:$IMG_VER docker stop $NAME docker rm $NAME docker rmi $IMG_NAME:$IMG_VER run exit $? ;; rm) echo -e docker stop $NAME echo -e docker rm $NAME docker stop $NAME docker rm $NAME exit $? ;; rmi) echo -e docker rmi $IMG_NAME docker rmi $IMG_NAME exit $? ;; rma) echo -e docker stop $NAME echo -e docker rm $NAME echo -e docker rmi $IMG_NAME:$IMG_VER docker stop $NAME docker rm $NAME docker rmi $IMG_NAME:$IMG_VER exit $? ;; exec) echo -e docker exec -it $NAME /bin/bash docker exec -it $NAME /bin/bash exit $? ;; run) run exit $? ;; *) echo -e "===============================================================================" >&2 echo -e "\033[32mUsage: $NAME.sh {pull|run|start|stop|restart|rm|rmi|rma|exec} name port padlocal_token wechaty_token\033[0m" >&2 echo -e "-------------------------------------------------------------------------------" >&2 echo -e "> pull --> 拉取镜像" >&2 echo -e "> run --> 新建容器" >&2 echo -e "> exec --> 进入容器" >&2 echo -e "> start --> 启动容器" >&2 echo -e "> stop --> 暂停容器" >&2 echo -e "> restart --> 重启容器(暂停容器+启动容器)" >&2 echo -e "> restarta --> 重启服务(暂停容器+移除容器+删除镜像+新建容器)" >&2 echo -e "> rm --> 删除容器" >&2 echo -e "> rmi --> 删除镜像" >&2 echo -e "> rma --> 删除服务(暂停容器+移除容器+删除镜像)" >&2 echo -e "-------------------------------------------------------------------------------" >&2 echo -e "> name --> 容器名" >&2 echo -e "> port --> 端口号" >&2 echo -e "> padlocal_token --> 需要到wechaty官网获取PADLOCAL TOKEN" >&2 echo -e "> wechaty_token --> 设定主机访问Token,验证地址:https://api.chatie.io/v0/hosties/WECHATY_TOKEN" >&2 echo -e ">" >&2 echo -e "===============================================================================" >&2 exit 1 ;; esac

脚本中要手动设定padlocal_token和wechaty_token

  1. padlocal_token要到wechaty官网获取;
  2. wechaty_token可以自定义,就是自己的主机名

或者执行shell脚本时候注入,具体可详见sh wechaty.sh 运行执行:sh wechaty.sh run docker ps看到容器运行成功后,访问 https://api.chatie.io/v0/hosties/[wechaty_token]验证 如果看到如下图代表成功: image

如果看到host和ip都是:0.0.0.0则是没有成功;

至此,wechaty服务搭建好了 回到chatgpt-on-wechat项目,将上面自定义的WECHATY TOKEN写入config.json的wechaty_puppet_service_token image

运行项目成功 image

Chiaki-Chan avatar Mar 13 '23 06:03 Chiaki-Chan

@chiakileftcang 解决了吗?我也出现这个错误了

我大概知道怎么回事了。 这需要自建一套wechaty的环境; 这是我写的一个运行docker容器的脚本(wechaty.sh): #!/bin/bash PWD=$(cddirname $0;pwd); IMG_NAME='wechaty/wechaty' IMG_VER='0.65' PORT=8080 NAME='wechaty-getway' export WECHATY_LOG="verbose" export WECHATY_PUPPET="wechaty-puppet-padlocal" export WECHATY_PUPPET_PADLOCAL_TOKEN="puppet_padlocal_0000000000000000000" # 这里输入你自己的token export WECHATY_PUPPET_SERVER_PORT="8080" export WECHATY_TOKEN="myhosttoken123" if [ $# -gt 1 ];then NAME=$2 fi if [ $# -gt 2 ];then PORT=$3 fi if [ $# -gt 3 ];then WECHATY_PUPPET_PADLOCAL_TOKEN=$4 export WECHATY_PUPPET_PADLOCAL_TOKEN=$4 fi if [ $# -gt 4 ];then WECHATY_TOKEN=$5 export WECHATY_TOKEN=$5 fi VPATH="" EXEC="--rm -e WECHATY_LOG -e WECHATY_PUPPET -e WECHATY_PUPPET_PADLOCAL_TOKEN -e WECHATY_PUPPET_SERVER_PORT -e WECHATY_TOKEN" `run() {` ` echo -e docker run --name $NAME -p $PORT:$PORT $EXEC $VPATH -d $IMG_NAME:$IMG_VER` ` docker run --name $NAME -p $PORT:$PORT $EXEC $VPATH -d $IMG_NAME:$IMG_VER` `}` case $1 in pull) echo -e docker pull ${IMG_NAME}:${IMG_VER} docker pull ${IMG_NAME}:${IMG_VER} exit $? ;; build) echo -e docker build -t ${IMG_NAME}:${IMG_VER} . docker build -t ${IMG_NAME}:${IMG_VER} . exit $? ;; start) echo -e docker start $NAME docker start $NAME exit $? ;; stop) echo -e docker stop $NAME docker stop $NAME exit $? ;; restart) echo -e docker stop $NAME echo -e docker start $NAME docker stop $NAME docker start $NAME exit $? ;; restarta) echo -e docker stop $NAME echo -e docker rm $NAME echo -e docker rmi $IMG_NAME:$IMG_VER docker stop $NAME docker rm $NAME docker rmi $IMG_NAME:$IMG_VER run exit $? ;; rm) echo -e docker stop $NAME echo -e docker rm $NAME docker stop $NAME docker rm $NAME exit $? ;; rmi) echo -e docker rmi $IMG_NAME docker rmi $IMG_NAME exit $? ;; rma) echo -e docker stop $NAME echo -e docker rm $NAME echo -e docker rmi $IMG_NAME:$IMG_VER docker stop $NAME docker rm $NAME docker rmi $IMG_NAME:$IMG_VER exit $? ;; exec) echo -e docker exec -it $NAME /bin/bash docker exec -it $NAME /bin/bash exit $? ;; run) run exit $? ;; *) echo -e "===============================================================================" >&2 echo -e "\033[32mUsage: $NAME.sh {pull|run|start|stop|restart|rm|rmi|rma|exec} name port padlocal_token wechaty_token\033[0m" >&2 echo -e "-------------------------------------------------------------------------------" >&2 echo -e "> pull --> 拉取镜像" >&2 echo -e "> run --> 新建容器" >&2 echo -e "> exec --> 进入容器" >&2 echo -e "> start --> 启动容器" >&2 echo -e "> stop --> 暂停容器" >&2 echo -e "> restart --> 重启容器(暂停容器+启动容器)" >&2 echo -e "> restarta --> 重启服务(暂停容器+移除容器+删除镜像+新建容器)" >&2 echo -e "> rm --> 删除容器" >&2 echo -e "> rmi --> 删除镜像" >&2 echo -e "> rma --> 删除服务(暂停容器+移除容器+删除镜像)" >&2 echo -e "-------------------------------------------------------------------------------" >&2 echo -e "> name --> 容器名" >&2 echo -e "> port --> 端口号" >&2 echo -e "> padlocal_token --> 需要到wechaty官网获取PADLOCAL TOKEN" >&2 echo -e "> wechaty_token --> 设定主机访问Token,验证地址:https://api.chatie.io/v0/hosties/WECHATY_TOKEN" >&2 echo -e ">" >&2 echo -e "===============================================================================" >&2 exit 1 ;; esac

脚本中要手动设定padlocal_token和wechaty_token

  1. padlocal_token要到wechaty官网获取;
  2. wechaty_token可以自定义,就是自己的主机名

或者执行shell脚本时候注入,具体可详见sh wechaty.sh 运行执行:sh wechaty.sh run docker ps看到容器运行成功后,访问 https://api.chatie.io/v0/hosties/[wechaty_token]验证 如果看到如下图代表成功: image

如果看到host和ip都是:0.0.0.0则是没有成功;

至此,wechaty服务搭建好了 回到chatgpt-on-wechat项目,将上面自定义的WECHATY TOKEN写入config.json的wechaty_puppet_service_token image

运行项目成功 image

image 请问我卡在这里是什么原因二维码没弹出

zxr11241 avatar Mar 28 '23 17:03 zxr11241

可以检查服务器的对外端口是否有开放,此外就是等它连接了

Chiaki-Chan avatar Mar 29 '23 02:03 Chiaki-Chan

@Chiaki-Chan 老哥。有封装好的文件夹么,直接发一个我? [email protected] 感谢

frankchn-x avatar Mar 29 '23 06:03 frankchn-x

大佬,最新版本的源码按照您的方法也不行了

kill136 avatar Dec 27 '23 08:12 kill136

今天搞了一天,gateway搭建在服务器上,本机执行程序,只成功登录上去两次,怀疑PadLocal服务器不太行啊。

hd19820806 avatar Jan 14 '24 13:01 hd19820806