Skip to content

Commit

Permalink
fix: incompatible methods
Browse files Browse the repository at this point in the history
  • Loading branch information
lss233 committed Feb 14, 2023
1 parent 3a83769 commit 67b2d7b
Show file tree
Hide file tree
Showing 5 changed files with 70 additions and 41 deletions.
5 changes: 5 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -153,6 +153,9 @@ password = "xxx"
# 如果你在国内,需要配置代理
# proxy="http://127.0.0.1:1080"

# 使用 ChatGPT Plus(plus 用户此项设置为 true)
paid = false

[text_to_image]
# 文字转图片
font_size = 30 # 字体大小
Expand Down Expand Up @@ -246,6 +249,8 @@ mode = "browser"

### Session 登录

**注:第三方代理模式无法使用 session_token 方式登录**

请参考 [这里](https://github.com/acheong08/ChatGPT/wiki/Setup) 了解 `session_token` 的获取方法。

如果你看见 `Exception: Wrong response code` 的错误,说明你的 `session_token` 过期了或者不正确。`session_token` 具有时效性,如果长期出现错误的情况,请重新获取你的 `session_token`[#29](https://github.com/lss233/chatgpt-mirai-qq-bot/issues/29)
Expand Down
11 changes: 11 additions & 0 deletions bot.py
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@
from graia.ariadne.message.parser.base import DetectPrefix, MentionMe
from graia.ariadne.event.mirai import NewFriendRequestEvent, BotInvitedJoinGroupRequestEvent
from graia.ariadne.message.element import Image
from graia.ariadne.event.lifecycle import AccountLaunch
from graia.ariadne.model import Friend, Group
from loguru import logger

Expand Down Expand Up @@ -138,4 +139,14 @@ async def on_friend_request(event: BotInvitedJoinGroupRequestEvent):
if config.system.accept_group_invite:
await event.accept()

@app.broadcast.receiver(AccountLaunch)
async def start_background(loop: asyncio.AbstractEventLoop):
try:
logger.info("OpenAI 服务器登录中……")
chatbot.setup()
except Exception as e:
logger.error("OpenAI 服务器失败!")
exit(-1)
logger.info("OpenAI 服务器登录成功")
logger.info("尝试从 Mirai 服务中读取机器人 QQ 的 session key……")
app.launch_blocking()
85 changes: 50 additions & 35 deletions chatbot.py
Original file line number Diff line number Diff line change
Expand Up @@ -11,38 +11,44 @@
from selenium.common.exceptions import TimeoutException

config = Config.load_config()

try:
logger.info("登录 OpenAI 中...")
if config.openai.mode == 'proxy':
logger.info("当前模式:第三方代理")
from revChatGPT.V1 import Chatbot
bot = Chatbot(config=config.openai.dict(exclude_none=True, by_alias=False), conversation_id=None)
else:
from revChatGPT.Unofficial import Chatbot
logger.info("当前模式:浏览器直接访问")
logger.info("这需要你拥有最新版的 Chrome 浏览器。")
logger.info("即将打开浏览器窗口……")
logger.info("提示:如果你看见了 Cloudflare 验证码,请手动完成验证。")
logger.info("如果浏览器反复弹出,请阅读项目 FAQ。")

if 'XPRA_PASSWORD' in os.environ:
logger.info("如果您使用 xpra,请使用自己的浏览器访问 xpra 程序的端口,以访问到本程序启动的浏览器。")
bot = Chatbot(config=config.openai.dict(exclude_none=True, by_alias=False), conversation_id=None)
except Exception as e:
logger.exception(e)
if config.openai.mode == 'proxy':
logger.error("OpenAI 登录失败,可能是账号密码有误、需要设置本地正向代理或其他原因。")
else:
if str(e) == "local variable 'driver' referenced before assignment":
logger.error("无法启动,请检查是否安装了 Chrome,或手动指定 Chromedriver 的位置")
logger.error("参考资料:https://github.com/acheong08/ChatGPT/wiki/Setup#dependencies")
elif e is TimeoutException:
logger.error("等待超时:没有在规定时间内完成登录。")
bot = None

def setup():
global bot
try:
logger.info("登录 OpenAI 中...")
if config.openai.mode == 'proxy':
logger.info("当前模式:第三方代理")
from revChatGPT.V1 import Chatbot
bot = Chatbot(config=config.openai.dict(exclude_none=True, by_alias=False), conversation_id=None)
else:
from revChatGPT.Unofficial import Chatbot
logger.info("当前模式:浏览器直接访问")
logger.info("这需要你拥有最新版的 Chrome 浏览器。")
logger.info("即将打开浏览器窗口……")
logger.info("提示:如果你看见了 Cloudflare 验证码,请手动完成验证。")
logger.info("如果浏览器反复弹出,请阅读项目 FAQ。")

if 'XPRA_PASSWORD' in os.environ:
logger.info("如果您使用 xpra,请使用自己的浏览器访问 xpra 程序的端口,以访问到本程序启动的浏览器。")
bot = Chatbot(config=config.openai.dict(exclude_none=True, by_alias=False), conversation_id=None)
except Exception as e:
logger.exception(e)
if config.openai.mode == 'proxy':
if str(e) == 'Wrong status code':
logger.error("OpenAI 登录失败,可能是账号密码有误。")
else:
logger.error("OpenAI 登录失败,可能是账号密码有误、需要设置本地正向代理或其他原因。")
else:
logger.error("OpenAI 登录失败,可能是 session_token 过期或无法通过 CloudFlare 验证,建议歇息一下再重试。")
logger.error("你也可以将模式修改为第三方代理来绕过这个步骤。")
raise e
if str(e) == "local variable 'driver' referenced before assignment":
logger.error("无法启动,请检查是否安装了 Chrome,或手动指定 Chromedriver 的位置")
logger.error("参考资料:https://github.com/acheong08/ChatGPT/wiki/Setup#dependencies")
elif e is TimeoutException:
logger.error("等待超时:没有在规定时间内完成登录。")
else:
logger.error("OpenAI 登录失败,可能是 session_token 过期或无法通过 CloudFlare 验证,建议歇息一下再重试。")
logger.error("你也可以将模式修改为第三方代理来绕过这个步骤。")
raise e


class ChatSession:
Expand Down Expand Up @@ -74,10 +80,19 @@ async def get_chat_response(self, message) -> str:
bot.parent_id = self.parent_id

loop = asyncio.get_event_loop()
final_resp = await loop.run_in_executor(None, bot.ask, message)
self.conversation_id = final_resp["conversation_id"]
self.parent_id = final_resp["parent_id"]
return final_resp["message"]
resp = await loop.run_in_executor(None, bot.ask, message)

if config.openai.mode == 'proxy':
final_resp = None
for item in resp:
final_resp = item
self.conversation_id = final_resp["conversation_id"]
self.parent_id = final_resp["parent_id"]
return final_resp["message"]
else:
self.conversation_id = resp["conversation_id"]
self.parent_id = resp["parent_id"]
return resp["message"]

__sessions = {}

Expand Down
6 changes: 2 additions & 4 deletions config.py
Original file line number Diff line number Diff line change
Expand Up @@ -19,8 +19,6 @@ class Mirai(BaseModel):
class OpenAIAuthBase(BaseModel):
mode: str = "browser"
"""使用 OpenAI 的模式,可选的值:proxy - 使用第三方代理、 browser - 使用浏览器"""
Authorization: Union[str, None] = Field(alias="authorization")
"""可选的验证头"""
proxy: Union[str, None] = None
"""可选的代理地址"""
driver_exec_path: Union[str, None] = None
Expand All @@ -29,6 +27,8 @@ class OpenAIAuthBase(BaseModel):
"""可选的 Chrome 浏览器路径"""
conversation: Union[str, None] = None
"""初始化对话所使用的UUID"""
paid: bool = False
"""使用 ChatGPT Plus"""
verbose: bool = False
"""启用详尽日志模式"""

Expand All @@ -40,8 +40,6 @@ class OpenAIEmailAuth(OpenAIAuthBase):
"""OpenAI 注册邮箱"""
password: str
"""OpenAI 密码"""
captcha: Union[str, None] = None
"""2Captcha API 密钥"""
isMicrosoftLogin: bool = False
"""是否通过 Microsoft 登录"""

Expand Down
4 changes: 2 additions & 2 deletions requirements.txt
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
graia-ariadne>=0.10.3
revChatGPT==2.2.2
OpenAIAuth
revChatGPT[unofficial]==2.2.2
toml
selenium
Pillow>=9.3.0

0 comments on commit 67b2d7b

Please sign in to comment.