Skip to content

Commit ab888e5

Browse files
committed
fix some lint error and add ty to recommandation extensions
1 parent c387e27 commit ab888e5

11 files changed

Lines changed: 108 additions & 108 deletions

File tree

.vscode/extensions.json

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
"yzhang.markdown-all-in-one",
66
// "astral-sh.ty",
77
"ms-python.python",
8-
"redhat.vscode-yaml"
8+
"redhat.vscode-yaml",
9+
"astral-sh.ty"
910
]
10-
}
11+
}

drivers/feishu.py

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -27,34 +27,34 @@
2727
# Rule channel keys:
2828
# chat_id – Feishu open chat ID, e.g. "oc_xxxxxxxxxxxxxxxxxx"
2929

30-
from drivers.registry import register
3130
import asyncio
3231
import io
3332
import json
3433
import logging
3534
import re
3635
import threading
3736

38-
from fastapi import FastAPI, Request, Response
3937
import lark_oapi as lark
38+
from fastapi import FastAPI, Request, Response
4039
from lark_oapi.api.contact.v3 import GetUserRequest
4140
from lark_oapi.api.im.v1 import (
42-
CreateMessageRequest,
43-
CreateMessageRequestBody,
44-
CreateImageRequest,
45-
CreateImageRequestBody,
4641
CreateFileRequest,
4742
CreateFileRequestBody,
43+
CreateImageRequest,
44+
CreateImageRequestBody,
45+
CreateMessageRequest,
46+
CreateMessageRequestBody,
4847
GetMessageResourceRequest,
4948
ReplyMessageRequest,
5049
ReplyMessageRequestBody,
5150
)
5251

5352
import services.logger as log
54-
import services.media as media
55-
from services.message import Attachment, NormalizedMessage
56-
from services.config_schema import _DriverConfig
5753
from drivers import BaseDriver
54+
from drivers.registry import register
55+
from services import media
56+
from services.config_schema import _DriverConfig
57+
from services.message import Attachment, NormalizedMessage
5858

5959

6060
class FeishuConfig(_DriverConfig):
@@ -202,18 +202,18 @@ async def _start_http_server(self) -> None:
202202
async def _handle_http(self, request: Request) -> Response:
203203
assert self._handler is not None # Type narrowing - handler is set in start()
204204
handler = self._handler
205-
body = await request.read()
205+
body = await request.body()
206206
# Create RawRequest with correct parameter names for lark-oapi
207207
raw_req = lark.RawRequest()
208-
raw_req.uri = request.path
208+
raw_req.uri = request.url.path
209209
raw_req.headers = dict(request.headers)
210210
raw_req.body = body
211211

212212
# lark-oapi's do() is synchronous; run in thread pool to avoid blocking
213213
loop = asyncio.get_running_loop()
214214
resp = await loop.run_in_executor(None, lambda: handler.do(raw_req))
215215
return Response(
216-
body=resp.content,
216+
content=resp.content,
217217
status_code=resp.status_code or 200,
218218
media_type=getattr(resp, "content_type", "application/json")
219219
or "application/json",

drivers/googlechat.py

Lines changed: 9 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -25,29 +25,28 @@
2525
#
2626
# * Exactly one of service_account_file or service_account_json is required.
2727

28-
from drivers.registry import register
2928
import asyncio
3029
import json
3130
from pathlib import Path
3231

3332
import aiohttp
33+
import google.auth.transport.requests as _ga_req
34+
import google.oauth2.service_account as _sa
35+
import requests
3436
from aiohttp_socks import ProxyConnector
3537
from fastapi import FastAPI, Request
3638
from fastapi.responses import JSONResponse, PlainTextResponse
3739
from pydantic import model_validator
38-
import requests
3940
from requests.adapters import HTTPAdapter
4041
from urllib3.util.retry import Retry
4142

42-
import google.oauth2.service_account as _sa
43-
import google.auth.transport.requests as _ga_req
44-
4543
import services.logger as log
46-
import services.media as media
47-
from services.message import Attachment, NormalizedMessage
48-
from services.config_schema import _DriverConfig
49-
from services.config import get_proxy, UNSET
5044
from drivers import BaseDriver
45+
from drivers.registry import register
46+
from services import media
47+
from services.config import UNSET, get_proxy
48+
from services.config_schema import _DriverConfig
49+
from services.message import Attachment, NormalizedMessage
5150

5251

5352
class GoogleChatConfig(_DriverConfig):
@@ -199,7 +198,7 @@ async def _handle_event(self, request: Request) -> JSONResponse | PlainTextRespo
199198
return PlainTextResponse("Invalid token", status_code=403)
200199

201200
try:
202-
body = await request.read()
201+
body = await request.body()
203202
event = json.loads(body)
204203
except Exception:
205204
return PlainTextResponse("Bad JSON", status_code=400)

drivers/kook.py

Lines changed: 9 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -14,22 +14,21 @@
1414
# Rule channel keys:
1515
# channel_id – KOOK text channel ID
1616

17-
from drivers.registry import register
1817
import io
1918
import re
2019

2120
import khl
21+
from aiohttp import ClientSession
22+
from aiohttp_socks import ProxyConnector
2223

2324
import services.logger as log
24-
import services.media as media
25-
from services.message import Attachment, NormalizedMessage
25+
from drivers import BaseDriver
26+
from drivers.registry import register
27+
from services import media
28+
from services.config import UNSET, get_proxy
2629
from services.config_schema import _DriverConfig
27-
from services.config import get_proxy, UNSET
2830
from services.db import msg_db
29-
from drivers import BaseDriver
30-
31-
from aiohttp import ClientSession
32-
from aiohttp_socks import ProxyConnector
31+
from services.message import Attachment, NormalizedMessage
3332

3433

3534
class KookConfig(_DriverConfig):
@@ -61,19 +60,8 @@ async def start(self):
6160
logger.debug(f"Kook [{self.instance_id}] using proxy {self._proxy}")
6261

6362
requester = self._bot.client.gate.requester
64-
original_request = requester.request
65-
proxy_url = self._proxy
66-
67-
async def proxied_request(method: str, route: str, **params):
68-
# inject connector on 1st request
69-
if requester._cs is not None and requester._cs.connector is None:
70-
connector = ProxyConnector.from_url(proxy_url, rdns=True)
71-
sess = ClientSession(connector=connector)
72-
requester._cs = sess
73-
74-
return await original_request(method, route, **params)
75-
76-
requester.request = proxied_request
63+
connector = ProxyConnector.from_url(self._proxy, rdns=True)
64+
requester._cs = ClientSession(connector=connector)
7765

7866
# Register our handler alongside khl's internal command-manager handler.
7967
# khl's Client dispatches to all registered handlers for a given type.

drivers/matrix.py

Lines changed: 37 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -18,9 +18,15 @@
1818
# Rule channel keys:
1919
# room_id – Matrix room ID, e.g. "!abc123:matrix.org"
2020

21-
from drivers.registry import register
21+
from pathlib import Path
22+
from typing import cast
23+
24+
from aiohttp import ClientSession, TCPConnector
25+
from aiohttp_socks import ProxyConnector
26+
from mautrix.api import HTTPAPI
2227
from mautrix.client import Client
2328
from mautrix.client.syncer import EventHandler
29+
from mautrix.crypto import OlmMachine
2430
from mautrix.types import (
2531
AudioInfo,
2632
ContentURI,
@@ -38,21 +44,15 @@
3844
UserID,
3945
VideoInfo,
4046
)
41-
from mautrix.api import HTTPAPI
42-
from mautrix.crypto import OlmMachine
43-
from typing import cast
44-
from aiohttp import ClientSession, TCPConnector
45-
from aiohttp_socks import ProxyConnector
46-
from pathlib import Path
47-
4847
from pydantic import model_validator
4948

5049
import services.logger as log
51-
import services.media as media
52-
from services.message import Attachment, NormalizedMessage
53-
from services.config_schema import _DriverConfig
54-
from services.config import get_proxy, UNSET
5550
from drivers import BaseDriver
51+
from drivers.registry import register
52+
from services import media
53+
from services.config import UNSET, get_proxy
54+
from services.config_schema import _DriverConfig
55+
from services.message import Attachment, NormalizedMessage
5656

5757

5858
class MatrixConfig(_DriverConfig):
@@ -152,9 +152,10 @@ async def start(self):
152152
if self.config.enable_e2e:
153153
try:
154154
from contextlib import asynccontextmanager
155+
156+
from mautrix.client.state_store import MemoryStateStore
155157
from mautrix.crypto import StateStore
156158
from mautrix.crypto.store import MemoryCryptoStore
157-
from mautrix.client.state_store import MemoryStateStore
158159

159160
# Create a custom CryptoStore that overrides the transaction() method
160161
class CustomCryptoStore(MemoryCryptoStore):
@@ -283,13 +284,13 @@ async def _get_profile(self, user_id: str) -> tuple[str, str]:
283284
name = await self._client.get_displayname(UserID(user_id))
284285
if name:
285286
display_name = name
286-
except Exception:
287+
except Exception: # noqa: S110
287288
pass
288289
try:
289290
mxc = await self._client.get_avatar_url(UserID(user_id))
290291
if mxc:
291292
avatar_url = self._mxc_to_http(str(mxc))
292-
except Exception:
293+
except Exception: # noqa: S110
293294
pass
294295
return display_name, avatar_url
295296

@@ -311,21 +312,27 @@ async def _on_encrypted_message(self, event) -> None:
311312

312313
# Convert to a regular MessageEvent and process
313314
if decrypted_event:
314-
# Create a mock MessageEvent with the decrypted content
315-
from mautrix.types import MessageEvent, RoomID, UserID
316-
317-
# Create a new event with decrypted content
318-
decrypted_msg_event = MessageEvent(
319-
content=decrypted_event,
320-
type=EventType.ROOM_MESSAGE,
321-
room_id=RoomID(event.room_id),
322-
event_id=event.event_id,
323-
sender=UserID(event.sender),
324-
timestamp=event.timestamp,
325-
)
326-
327-
# Process the decrypted message
328-
await self._on_message(decrypted_msg_event)
315+
# Create a mock MessageEvent with the decrypted message content.
316+
decrypted_content = getattr(decrypted_event, "content", None)
317+
if isinstance(
318+
decrypted_content,
319+
(TextMessageEventContent, MediaMessageEventContent),
320+
):
321+
from mautrix.types import MessageEvent, RoomID, UserID
322+
323+
decrypted_msg_event = MessageEvent(
324+
content=decrypted_content,
325+
type=EventType.ROOM_MESSAGE,
326+
room_id=RoomID(event.room_id),
327+
event_id=event.event_id,
328+
sender=UserID(event.sender),
329+
timestamp=event.timestamp,
330+
)
331+
await self._on_message(decrypted_msg_event)
332+
else:
333+
logger.warning(
334+
f"Matrix [{self.instance_id}] unsupported decrypted content type"
335+
)
329336
else:
330337
logger.warning(f"Matrix [{self.instance_id}] Failed to decrypt event")
331338
except Exception as e:

drivers/slack.py

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -23,32 +23,30 @@
2323
# channel_id – Slack channel ID, e.g. "C1234567890"
2424
# (ignored when send_method="webhook"; channel is fixed by the webhook URL)
2525

26-
from drivers.registry import register
2726
import asyncio
2827
import hashlib
2928
import hmac as _hmac
3029
import json
3130
import time
31+
from typing import Literal
3232

3333
import aiohttp
3434
from aiohttp_socks import ProxyConnector
3535
from fastapi import FastAPI, Request
3636
from fastapi.responses import JSONResponse, PlainTextResponse
37-
3837
from slack_sdk.socket_mode.aiohttp import SocketModeClient
3938
from slack_sdk.socket_mode.async_client import AsyncBaseSocketModeClient
4039
from slack_sdk.socket_mode.request import SocketModeRequest
4140
from slack_sdk.socket_mode.response import SocketModeResponse
4241
from slack_sdk.web.async_client import AsyncWebClient
4342

44-
from typing import Literal
45-
4643
import services.logger as log
47-
import services.media as media
48-
from services.message import Attachment, NormalizedMessage
49-
from services.config_schema import _DriverConfig
50-
from services.config import get_proxy, UNSET
5144
from drivers import BaseDriver
45+
from drivers.registry import register
46+
from services import media
47+
from services.config import UNSET, get_proxy
48+
from services.config_schema import _DriverConfig
49+
from services.message import Attachment, NormalizedMessage
5250

5351

5452
class SlackConfig(_DriverConfig):
@@ -206,7 +204,7 @@ async def _on_request(
206204
async def _handle_events_api(
207205
self, request: Request
208206
) -> JSONResponse | PlainTextResponse:
209-
body = await request.read()
207+
body = await request.body()
210208

211209
if self.config.signing_secret and not _verify_slack_signature(
212210
self.config.signing_secret, request.headers, body
@@ -430,8 +428,10 @@ def _post_kwargs(msg_text: str) -> dict:
430428
mid = resp.get("ts")
431429
if not first_msg_id:
432430
first_msg_id = str(mid)
433-
except Exception:
434-
pass
431+
except Exception as e:
432+
logger.warning(
433+
f"Slack [{self.instance_id}] failed to send attachment label: {e}"
434+
)
435435
continue
436436

437437
data_bytes, mime = result

drivers/teams.py

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,6 @@
1818
# (e.g. "https://smba.trafficmanager.net/amer/")
1919
# conversation_id – Value of activity.conversation.id
2020

21-
from drivers.registry import register
2221
import asyncio
2322
import json
2423
import time
@@ -29,11 +28,12 @@
2928
from fastapi.responses import PlainTextResponse
3029

3130
import services.logger as log
32-
import services.media as media
33-
from services.message import Attachment, NormalizedMessage
34-
from services.config_schema import _DriverConfig
35-
from services.config import get_proxy, UNSET
3631
from drivers import BaseDriver
32+
from drivers.registry import register
33+
from services import media
34+
from services.config import UNSET, get_proxy
35+
from services.config_schema import _DriverConfig
36+
from services.message import Attachment, NormalizedMessage
3737

3838

3939
class TeamsConfig(_DriverConfig):
@@ -125,7 +125,7 @@ async def _get_token(self) -> str:
125125

126126
async def _handle_activity(self, request: Request) -> PlainTextResponse:
127127
try:
128-
body = await request.read()
128+
body = await request.body()
129129
activity = json.loads(body)
130130
except Exception:
131131
return PlainTextResponse("Bad JSON", status_code=400)

0 commit comments

Comments
 (0)