mirror of
https://github.com/zhayujie/chatgpt-on-wechat.git
synced 2026-06-17 06:27:28 +08:00
Compare commits
10 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 9d2cb75c84 | |||
| f971505c4a | |||
| 2133c1d6af | |||
| 0bf06ddfd3 | |||
| 024a50d642 | |||
| e4eebd64d1 | |||
| c9055989e9 | |||
| 4f1ed197ce | |||
| 3e710aa2a1 | |||
| b6226a45bb |
@@ -14,8 +14,12 @@
|
|||||||
> 欢迎接入更多应用,参考 [Terminal代码](https://github.com/zhayujie/chatgpt-on-wechat/blob/master/channel/terminal/terminal_channel.py)实现接收和发送消息逻辑即可接入。 同时欢迎增加新的插件,参考 [插件说明文档](https://github.com/zhayujie/chatgpt-on-wechat/tree/master/plugins)。
|
> 欢迎接入更多应用,参考 [Terminal代码](https://github.com/zhayujie/chatgpt-on-wechat/blob/master/channel/terminal/terminal_channel.py)实现接收和发送消息逻辑即可接入。 同时欢迎增加新的插件,参考 [插件说明文档](https://github.com/zhayujie/chatgpt-on-wechat/tree/master/plugins)。
|
||||||
|
|
||||||
**一键部署:**
|
**一键部署:**
|
||||||
|
- 个人微信
|
||||||
|
|
||||||
[](https://railway.app/template/qApznZ?referralCode=RC3znh)
|
[](https://railway.app/template/qApznZ?referralCode=RC3znh)
|
||||||
|
- 企业微信应用号
|
||||||
|
|
||||||
|
[](https://railway.app/template/-FHS--?referralCode=RC3znh)
|
||||||
|
|
||||||
# 演示
|
# 演示
|
||||||
|
|
||||||
|
|||||||
@@ -93,7 +93,8 @@ class WechatComAppChannel(ChatChannel):
|
|||||||
image_storage = io.BytesIO()
|
image_storage = io.BytesIO()
|
||||||
for block in pic_res.iter_content(1024):
|
for block in pic_res.iter_content(1024):
|
||||||
image_storage.write(block)
|
image_storage.write(block)
|
||||||
if (sz := fsize(image_storage)) >= 10 * 1024 * 1024:
|
sz = fsize(image_storage)
|
||||||
|
if sz >= 10 * 1024 * 1024:
|
||||||
logger.info("[wechatcom] image too large, ready to compress, sz={}".format(sz))
|
logger.info("[wechatcom] image too large, ready to compress, sz={}".format(sz))
|
||||||
image_storage = compress_imgfile(image_storage, 10 * 1024 * 1024 - 1)
|
image_storage = compress_imgfile(image_storage, 10 * 1024 * 1024 - 1)
|
||||||
logger.info("[wechatcom] image compressed, sz={}".format(fsize(image_storage)))
|
logger.info("[wechatcom] image compressed, sz={}".format(fsize(image_storage)))
|
||||||
@@ -109,7 +110,8 @@ class WechatComAppChannel(ChatChannel):
|
|||||||
logger.info("[wechatcom] sendImage url={}, receiver={}".format(img_url, receiver))
|
logger.info("[wechatcom] sendImage url={}, receiver={}".format(img_url, receiver))
|
||||||
elif reply.type == ReplyType.IMAGE: # 从文件读取图片
|
elif reply.type == ReplyType.IMAGE: # 从文件读取图片
|
||||||
image_storage = reply.content
|
image_storage = reply.content
|
||||||
if (sz := fsize(image_storage)) >= 10 * 1024 * 1024:
|
sz = fsize(image_storage)
|
||||||
|
if sz >= 10 * 1024 * 1024:
|
||||||
logger.info("[wechatcom] image too large, ready to compress, sz={}".format(sz))
|
logger.info("[wechatcom] image too large, ready to compress, sz={}".format(sz))
|
||||||
image_storage = compress_imgfile(image_storage, 10 * 1024 * 1024 - 1)
|
image_storage = compress_imgfile(image_storage, 10 * 1024 * 1024 - 1)
|
||||||
logger.info("[wechatcom] image compressed, sz={}".format(fsize(image_storage)))
|
logger.info("[wechatcom] image compressed, sz={}".format(fsize(image_storage)))
|
||||||
|
|||||||
@@ -4,7 +4,7 @@ import time
|
|||||||
import web
|
import web
|
||||||
from wechatpy import parse_message
|
from wechatpy import parse_message
|
||||||
from wechatpy.replies import ImageReply, VoiceReply, create_reply
|
from wechatpy.replies import ImageReply, VoiceReply, create_reply
|
||||||
|
import textwrap
|
||||||
from bridge.context import *
|
from bridge.context import *
|
||||||
from bridge.reply import *
|
from bridge.reply import *
|
||||||
from channel.wechatmp.common import *
|
from channel.wechatmp.common import *
|
||||||
|
|||||||
@@ -26,4 +26,4 @@ RUN chmod +x /entrypoint.sh \
|
|||||||
|
|
||||||
USER noroot
|
USER noroot
|
||||||
|
|
||||||
ENTRYPOINT ["docker/entrypoint.sh"]
|
ENTRYPOINT ["/entrypoint.sh"]
|
||||||
|
|||||||
@@ -31,9 +31,10 @@ WORKDIR ${BUILD_PREFIX}
|
|||||||
ADD ./entrypoint.sh /entrypoint.sh
|
ADD ./entrypoint.sh /entrypoint.sh
|
||||||
|
|
||||||
RUN chmod +x /entrypoint.sh \
|
RUN chmod +x /entrypoint.sh \
|
||||||
|
&& mkdir -p /home/noroot \
|
||||||
&& groupadd -r noroot \
|
&& groupadd -r noroot \
|
||||||
&& useradd -r -g noroot -s /bin/bash -d /home/noroot noroot \
|
&& useradd -r -g noroot -s /bin/bash -d /home/noroot noroot \
|
||||||
&& chown -R noroot:noroot ${BUILD_PREFIX}
|
&& chown -R noroot:noroot /home/noroot ${BUILD_PREFIX} /usr/local/lib
|
||||||
|
|
||||||
USER noroot
|
USER noroot
|
||||||
|
|
||||||
|
|||||||
@@ -25,10 +25,11 @@ WORKDIR ${BUILD_PREFIX}
|
|||||||
ADD docker/entrypoint.sh /entrypoint.sh
|
ADD docker/entrypoint.sh /entrypoint.sh
|
||||||
|
|
||||||
RUN chmod +x /entrypoint.sh \
|
RUN chmod +x /entrypoint.sh \
|
||||||
|
&& mkdir -p /home/noroot \
|
||||||
&& groupadd -r noroot \
|
&& groupadd -r noroot \
|
||||||
&& useradd -r -g noroot -s /bin/bash -d /home/noroot noroot \
|
&& useradd -r -g noroot -s /bin/bash -d /home/noroot noroot \
|
||||||
&& chown -R noroot:noroot ${BUILD_PREFIX}
|
&& chown -R noroot:noroot /home/noroot ${BUILD_PREFIX} /usr/local/lib
|
||||||
|
|
||||||
USER noroot
|
USER noroot
|
||||||
|
|
||||||
ENTRYPOINT ["docker/entrypoint.sh"]
|
ENTRYPOINT ["/entrypoint.sh"]
|
||||||
@@ -25,8 +25,9 @@ def auto_login(self, hotReload=False, statusStorageDir='itchat.pkl',
|
|||||||
self.useHotReload = hotReload
|
self.useHotReload = hotReload
|
||||||
self.hotReloadDir = statusStorageDir
|
self.hotReloadDir = statusStorageDir
|
||||||
if hotReload:
|
if hotReload:
|
||||||
if rval:=self.load_login_status(statusStorageDir,
|
rval=self.load_login_status(statusStorageDir,
|
||||||
loginCallback=loginCallback, exitCallback=exitCallback):
|
loginCallback=loginCallback, exitCallback=exitCallback)
|
||||||
|
if rval:
|
||||||
return
|
return
|
||||||
logger.error('Hot reload failed, logging in normally, error={}'.format(rval))
|
logger.error('Hot reload failed, logging in normally, error={}'.format(rval))
|
||||||
self.logout()
|
self.logout()
|
||||||
|
|||||||
@@ -123,7 +123,7 @@ class PluginManager:
|
|||||||
try:
|
try:
|
||||||
instance = plugincls()
|
instance = plugincls()
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
logger.error("Failed to init %s, diabled. %s" % (name, e))
|
logger.exception("Failed to init %s, diabled. %s" % (name, e))
|
||||||
self.disable_plugin(name)
|
self.disable_plugin(name)
|
||||||
failed_plugins.append(name)
|
failed_plugins.append(name)
|
||||||
continue
|
continue
|
||||||
|
|||||||
@@ -31,7 +31,8 @@ class BaiduTranslator(Translator):
|
|||||||
while retry_cnt:
|
while retry_cnt:
|
||||||
r = requests.post(self.url, params=payload, headers=headers)
|
r = requests.post(self.url, params=payload, headers=headers)
|
||||||
result = r.json()
|
result = r.json()
|
||||||
if errcode := result.get("error_code", "52000") != "52000":
|
errcode = result.get("error_code", "52000")
|
||||||
|
if errcode != "52000":
|
||||||
if errcode == "52001" or errcode == "52002":
|
if errcode == "52001" or errcode == "52002":
|
||||||
retry_cnt -= 1
|
retry_cnt -= 1
|
||||||
continue
|
continue
|
||||||
|
|||||||
Reference in New Issue
Block a user