|
9 | 9 | ws_config = user_config["ws"]
|
10 | 10 |
|
11 | 11 |
|
12 |
| -def get_request_body(message, user_id: int = -1, group_id: int = -1): |
| 12 | +def _get_params(message, user_id: int = -1, group_id: int = -1) -> dict: |
13 | 13 | '''
|
14 |
| - Get request body for sending message. |
15 |
| - Return: |
16 |
| - request_body: str |
17 |
| - echo_message: str |
| 14 | + Get params for sending message. |
18 | 15 | '''
|
19 |
| - echo_message = f"send_mannually_by_cmd_{time.time()}" |
20 |
| - request_body = { |
21 |
| - "action": "send_msg", |
22 |
| - "params": { |
23 |
| - "message": message, |
24 |
| - }, |
25 |
| - "echo": echo_message |
26 |
| - } |
| 16 | + params = {"message": message} |
27 | 17 | # group_id is more important than user_id
|
28 | 18 | if group_id != -1:
|
29 |
| - request_body["params"]["group_id"] = group_id |
| 19 | + params["group_id"] = group_id |
30 | 20 | elif user_id != -1:
|
31 |
| - request_body["params"]["user_id"] = user_id |
32 |
| - return json.dumps(request_body), echo_message |
| 21 | + params["user_id"] = user_id |
| 22 | + return params |
33 | 23 |
|
34 | 24 | class Sender:
|
35 |
| - async def send_message(self, message, user_id: int = -1, group_id: int = -1): |
36 |
| - # Why to set default value to -1? To keep the type of user_id and group_id are int. |
37 |
| - request_body, echo_message = get_request_body(message, user_id, group_id) |
| 25 | + async def _call_api(self, action: str, params: dict, echo_message: str = "call_mannually_by_cmd", timeout: int = 30, print_response: bool = True) -> dict: |
| 26 | + start_time = time.time() |
| 27 | + echo_message += f"_{start_time}" |
| 28 | + request_body = { |
| 29 | + "action": action, |
| 30 | + "params" : params, |
| 31 | + "echo": echo_message |
| 32 | + } |
38 | 33 | async with websockets.connect(
|
39 | 34 | f"ws://localhost:{ws_config['port-send']}"
|
40 | 35 | ) as websocket:
|
41 |
| - await websocket.send(request_body) |
| 36 | + await websocket.send(json.dumps(request_body)) |
42 | 37 | while True: # wait for response
|
43 | 38 | response = await websocket.recv()
|
44 | 39 | response = json.loads(response)
|
45 | 40 | if response.get("echo") == echo_message:
|
46 | 41 | break
|
47 |
| - response = json.dumps(response, sort_keys=True, indent=4) |
48 |
| - print(f"Response < \n{response}") |
| 42 | + if time.time() - start_time > timeout: |
| 43 | + raise TimeoutError(f"Timeout when calling {action}") |
| 44 | + response_str = json.dumps(response, sort_keys=True, indent=4) |
| 45 | + if print_response: |
| 46 | + print(f"\033[1;36mResponse <\033[0m \n{response_str}") |
| 47 | + return response |
| 48 | + |
| 49 | + async def send_message(self, message, user_id: int = -1, group_id: int = -1) -> None: |
| 50 | + # Why to set default value to -1? To keep the type of user_id and group_id are int. |
| 51 | + await self._call_api('send_msg', _get_params(message, user_id, group_id), "send_mannuall_by_cmd") |
49 | 52 |
|
50 | 53 |
|
51 | 54 | sender = Sender()
|
0 commit comments