🚧 move cqhttp config into adapter

This commit is contained in:
yanyongyu 2021-01-12 17:55:27 +08:00
parent 719858168e
commit 9d047daef5
3 changed files with 24 additions and 4 deletions

View File

@ -14,6 +14,7 @@ from nonebot.adapters import Bot as BaseBot
from nonebot.exception import RequestDenied from nonebot.exception import RequestDenied
from .utils import log, escape from .utils import log, escape
from .config import Config as CQHTTPConfig
from .message import Message, MessageSegment from .message import Message, MessageSegment
from .event import Reply, Event, MessageEvent, get_event_model from .event import Reply, Event, MessageEvent, get_event_model
from .exception import NetworkError, ApiNotAvailable, ActionFailed from .exception import NetworkError, ApiNotAvailable, ActionFailed
@ -226,6 +227,8 @@ class Bot(BaseBot):
*, *,
websocket: Optional["WebSocket"] = None): websocket: Optional["WebSocket"] = None):
self.cqhttp_config = CQHTTPConfig(**config.dict())
super().__init__(driver, super().__init__(driver,
connection_type, connection_type,
config, config,
@ -252,6 +255,7 @@ class Bot(BaseBot):
x_self_id = headers.get("x-self-id") x_self_id = headers.get("x-self-id")
x_signature = headers.get("x-signature") x_signature = headers.get("x-signature")
token = get_auth_bearer(headers.get("authorization")) token = get_auth_bearer(headers.get("authorization"))
cqhttp_config = CQHTTPConfig(**driver.config.dict())
# 检查连接方式 # 检查连接方式
if connection_type not in ["http", "websocket"]: if connection_type not in ["http", "websocket"]:
@ -264,7 +268,7 @@ class Bot(BaseBot):
raise RequestDenied(400, "Missing X-Self-ID Header") raise RequestDenied(400, "Missing X-Self-ID Header")
# 检查签名 # 检查签名
secret = driver.config.secret secret = cqhttp_config.cqhttp_secret
if secret and connection_type == "http": if secret and connection_type == "http":
if not x_signature: if not x_signature:
log("WARNING", "Missing Signature Header") log("WARNING", "Missing Signature Header")
@ -275,7 +279,7 @@ class Bot(BaseBot):
log("WARNING", "Signature Header is invalid") log("WARNING", "Signature Header is invalid")
raise RequestDenied(403, "Signature is invalid") raise RequestDenied(403, "Signature is invalid")
access_token = driver.config.access_token access_token = cqhttp_config.cqhttp_access_token
if access_token and access_token != token: if access_token and access_token != token:
log( log(
"WARNING", "Authorization Header is invalid" "WARNING", "Authorization Header is invalid"
@ -374,8 +378,9 @@ class Bot(BaseBot):
api_root += "/" api_root += "/"
headers = {} headers = {}
if self.config.access_token is not None: if self.cqhttp_config.cqhttp_access_token is not None:
headers["Authorization"] = "Bearer " + self.config.access_token headers[
"Authorization"] = "Bearer " + self.cqhttp_config.cqhttp_access_token
try: try:
async with httpx.AsyncClient(headers=headers) as client: async with httpx.AsyncClient(headers=headers) as client:

View File

@ -0,0 +1,12 @@
from typing import Optional
from pydantic import Field, BaseSettings
class Config(BaseSettings):
cqhttp_access_token: Optional[str] = Field(default=None,
alias="access_token")
cqhttp_secret: Optional[str] = Field(default=None, alias="secret")
class Config:
extra = "ignore"

View File

@ -276,6 +276,9 @@ class Config(BaseConfig):
SESSION_EXPIRE_TIMEOUT=P[DD]DT[HH]H[MM]M[SS]S # ISO 8601 SESSION_EXPIRE_TIMEOUT=P[DD]DT[HH]H[MM]M[SS]S # ISO 8601
""" """
# adapter configs
# adapter configs are defined in adapter/config.py
# custom configs # custom configs
# custom configs can be assigned during nonebot.init # custom configs can be assigned during nonebot.init
# or from env file using json loads # or from env file using json loads