Skip to content

Commit dee1f20

Browse files
authored
Merge pull request #32 from Mooling0602/dev
dev -> main
2 parents c0be0b6 + a70a945 commit dee1f20

File tree

20 files changed

+300
-158
lines changed

20 files changed

+300
-158
lines changed

config.ini

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
# Ci configuration for GitHub Actions.
22
[framework]
3-
ver=4
3+
ver=3
44
[main]
5-
ver=2.5.0
5+
ver=2.5.1
66
[release]
77
test=0
88
[ci]

lang/en_us.yml

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,9 @@ matrix_sync:
1616
success: Login by password successfully!
1717
save_token: Saving token for the bot account...
1818
on_receiver_cancelled: Receiver task was cancelled.
19-
on_send_command: Message is sending to matrix...
19+
on_send_command:
20+
sending: Message is sending to matrix...
21+
failed: Error when sending message
2022
on_sync_running: Already running message sync!
2123
on_sync_start: Starting message sync...
2224
on_unload: Unloading MatrixSync...
@@ -25,6 +27,8 @@ matrix_sync:
2527
on_startup: MC server started!
2628
on_stop: MC server stopped.
2729
on_crash: MC server crashed!
30+
settings_comp_check:
31+
failed: "Compatibility check failed! Backup old settings as \"settings.json.bak\"."
2832
sync_status:
2933
running: MSync is running...
3034
not_running: MSync is not running.

lang/zh_cn.yml

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,9 @@ matrix_sync:
1616
success: 成功使用密码完成登录!
1717
save_token: 正在为机器人账号保存Token...
1818
on_receiver_cancelled: 接收器任务已经取消。
19-
on_send_command: 消息正在发送到Matrix...
19+
on_send_command:
20+
sending: 消息正在发送到Matrix...
21+
failed: 发送消息时发生错误
2022
on_sync_running: 消息同步已在运行!
2123
on_sync_start: 开始消息同步...
2224
on_unload: 正在卸载 MatrixSync...
@@ -25,6 +27,8 @@ matrix_sync:
2527
on_startup: MC服务器启动完成!
2628
on_stop: MC服务器已关闭
2729
on_crash: MC服务器发生崩溃!
30+
settings_comp_check:
31+
failed: "兼容性检查失败!旧有的设置项将备份为\"settings.json.bak\""
2832
sync_status:
2933
running: "[MSync] 消息同步正在运行..."
3034
not_running: "[MSync] 消息同步未在运行!"

matrix_sync/client/init.py

Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,11 @@
11
import json
22
import sys
33
import aiofiles
4+
import matrix_sync.logger.get_logger as get_logger
45
import matrix_sync.plg_globals as plg_globals
56

67
from . import *
7-
from ..utils.logger import *
8+
from ..utils import configDir, tr
89
from ..utils.token import getToken
910
from nio import LoginResponse
1011

@@ -17,28 +18,29 @@ async def cache_token(resp: LoginResponse):
1718
}))
1819

1920
async def login_by_password():
21+
logger = get_logger()
2022
client = AsyncClient(
2123
get_homeserver(plg_globals.config["homeserver"]),
2224
plg_globals.config["user_id"],
2325
plg_globals.config["device_id"]
2426
)
2527
resp = await client.login(plg_globals.config["password"], device_name=plg_globals.config["device_id"])
2628
if isinstance(resp, LoginResponse):
27-
log_info(tr("login.success"))
29+
logger.info(tr("login.success"), "FirstLogin")
2830
await cache_token(resp)
29-
log_info(tr("login.save_token"))
31+
plg_globals.token_vaild = True
32+
logger.info(tr("login.save_token"), "FirstLogin")
3033
else:
3134
tip = tr("login.failed")
32-
log_error(f"{tip}: {resp}")
35+
logger.error(f"{tip}: {resp}", "FirstLogin")
3336
homeserver = get_homeserver(plg_globals.config["homeserver"])
34-
log_info(f'homeserver: "{homeserver}", bot: "{plg_globals.config["user_id"]}"')
35-
log_error(tr("check_config"))
37+
logger.info(f'homeserver: "{homeserver}", bot: "{plg_globals.config["user_id"]}"', "FirstLogin")
38+
logger.error(tr("check_config"), "FirstLogin")
3639
sys.exit(1)
3740

3841
async def check_token() -> bool:
3942
user, token = await getToken()
4043
if user != plg_globals.config["user_id"]:
41-
log_error(tr("token_mismatch"))
4244
return False
4345
else:
4446
return True

matrix_sync/client/receiver.py

Lines changed: 44 additions & 56 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,9 @@
11
# thread MatrixReceiver
22
import asyncio
3+
import matrix_sync.logger.get_logger as get_logger
34
import matrix_sync.plg_globals as plg_globals
45

56
from . import *
6-
from .init import check_token
7-
from ..utils.logger import *
87
from ..utils.token import getToken
98
from ..utils import tr
109
from ..event import *
@@ -16,77 +15,66 @@
1615
receiver = None
1716

1817
async def message_callback(room: MatrixRoom, event: RoomMessageText) -> None:
19-
message_format = plg_globals.settings["message_format"]["all_room"]
20-
room_message = message_format.replace('%room_display_name%', room.display_name).replace('%sender%', room.user_name(event.sender)).replace('%message%', event.body)
21-
# Avoid echo messages.
22-
if not event.sender == plg_globals.config["user_id"]:
23-
# Apply settings config
24-
if not plg_globals.settings["listen"]["all_rooms"]:
25-
message_format = plg_globals.settings["message_format"]["single_room"]
26-
room_message = message_format.replace('%sender%', room.user_name(event.sender)).replace('%message%', event.body)
27-
event_dispatcher(MatrixMessageEvent, event.body, room.user_name(event.sender), room.room_id)
28-
log_info(room_message, "Message")
29-
psi.say(room_message)
18+
room_info.id = room.room_id
19+
room_info.display_name= room.display_name
20+
if event.sender != plg_globals.config["user_id"]:
21+
event_dispatcher(MatrixMessageEvent, event.body, room.user_name(event.sender), room)
3022

3123
def on_sync_error(response: SyncError):
24+
logger = get_logger()
3225
global homeserver_online
33-
log_error(f"Sync error: {response.status_code}")
26+
logger.error(f"Sync error: {response.status_code}")
3427
if response.status_code >= 500:
3528
homeserver_online = False
3629

3730
async def get_messages() -> None:
31+
logger = get_logger()
3832
global receiver
3933
resp = None
4034
client = AsyncClient(homeserver=get_homeserver(plg_globals.config["homeserver"]))
41-
token_vaild = await check_token()
42-
if token_vaild:
43-
user, token = await getToken()
4435

45-
client.user_id = plg_globals.config["user_id"]
46-
client.access_token = token
47-
client.device_id = plg_globals.config["device_id"]
36+
client.user_id = plg_globals.config["user_id"]
37+
user, token = await getToken()
38+
client.access_token = token
39+
client.device_id = plg_globals.config["device_id"]
4840

49-
if not plg_globals.settings["listen"]["all_rooms"]:
50-
log_info("ok.")
51-
cfg_room_id = plg_globals.config["room_id"]
52-
log_info(f"Listening: {cfg_room_id}")
53-
resp = await client.upload_filter(room={"rooms": [cfg_room_id]})
54-
if isinstance(resp, UploadFilterError):
55-
log_error(resp)
41+
if not plg_globals.settings["listen"]["all_rooms"]:
42+
logger.info("ok.", "Receiver")
43+
cfg_room_id = plg_globals.config["room_id"]
44+
logger.info(f"Listening: {cfg_room_id}", "Receiver")
45+
resp = await client.upload_filter(room={"rooms": [cfg_room_id]})
46+
if isinstance(resp, UploadFilterError):
47+
logger.error(resp, "Receiver")
5648

57-
client.add_response_callback(on_sync_error, SyncError)
49+
client.add_response_callback(on_sync_error, SyncError)
5850

59-
if homeserver_online:
60-
if plg_globals.settings["listen"]["old_messages"] is True:
61-
receiver = asyncio.create_task(client.sync_forever(timeout=5))
62-
else:
63-
if resp is not None:
64-
await client.sync(timeout=5, sync_filter=resp.filter_id)
65-
client.add_event_callback(message_callback, RoomMessageText)
66-
receiver = asyncio.create_task(client.sync_forever(timeout=5, sync_filter=resp.filter_id))
67-
else:
68-
await client.sync(timeout=5)
69-
client.add_event_callback(message_callback, RoomMessageText)
70-
receiver = asyncio.create_task(client.sync_forever(timeout=5))
51+
if homeserver_online:
52+
if plg_globals.settings["listen"]["old_messages"] is True:
53+
receiver = asyncio.create_task(client.sync_forever(timeout=5))
7154
else:
72-
log_error("Sync failed: homeserver is down or your network disconnected with it.")
73-
log_info("Use !!msync start after homeserver is running or your network restored.")
55+
if resp is not None:
56+
await client.sync(timeout=5, sync_filter=resp.filter_id)
57+
client.add_event_callback(message_callback, RoomMessageText)
58+
receiver = asyncio.create_task(client.sync_forever(timeout=5, sync_filter=resp.filter_id))
59+
else:
60+
await client.sync(timeout=5)
61+
client.add_event_callback(message_callback, RoomMessageText)
62+
receiver = asyncio.create_task(client.sync_forever(timeout=5))
63+
else:
64+
logger.error("Sync failed: homeserver is down or your network disconnected with it.", "Receiver")
65+
logger.info("Use !!msync start after homeserver is running or your network restored.", "Receiver")
7466

75-
try:
76-
await receiver
77-
except asyncio.CancelledError:
78-
log_warning(tr("on_receiver_cancelled"))
79-
except Exception as e:
80-
log_error(f"Receiver sync error: {e}")
67+
try:
68+
await receiver
69+
except asyncio.CancelledError:
70+
logger.warning(tr("on_receiver_cancelled"), "Receiver")
71+
except Exception as e:
72+
logger.error(f"Receiver sync error: {e}", "Receiver")
73+
receiver.cancel()
74+
finally:
75+
if receiver:
8176
receiver.cancel()
82-
finally:
83-
if receiver:
84-
receiver.cancel()
85-
try:
86-
await receiver
87-
except asyncio.CancelledError:
88-
pass
89-
client.stop_sync_forever()
77+
if client is not None:
9078
await client.close()
9179

9280
async def stop_sync():

matrix_sync/client/reporter.py

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3,17 +3,14 @@
33
import matrix_sync.plg_globals as plg_globals
44

55
from . import get_homeserver
6-
from .init import check_token
76
from ..utils import *
8-
from ..utils.logger import *
97
from ..utils.token import getToken
108
from nio import AsyncClient
119

1210

1311
async def send_to_matrix(message) -> None:
1412
client = AsyncClient(get_homeserver(plg_globals.config["homeserver"]))
15-
token_vaild = await check_token()
16-
if token_vaild:
13+
if plg_globals.token_vaild:
1714
user, token = await getToken()
1815

1916
client.user_id = plg_globals.config["user_id"]

matrix_sync/commands/__init__.py

Lines changed: 21 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,13 @@
11
import asyncio
22
import threading
3+
import matrix_sync.logger.get_logger as get_logger
34
import matrix_sync.plg_globals as plg_globals
45

56
from mcdreforged.api.all import *
67
from ..client.reporter import send_to_matrix
78
from ..client.receiver import get_messages, stop_sync
89
from ..client import *
9-
from ..utils import tr
10-
from ..utils.logger import *
10+
from ..utils import *
1111
from .help import *
1212

1313

@@ -16,17 +16,23 @@
1616
plg_globals.tLock = threading.Lock()
1717

1818
def start_sync():
19+
logger = get_logger()
1920
if not plg_globals.tLock.locked():
2021
run_sync_task()
21-
log_info(tr("on_sync_start"))
2222
else:
23-
log_warning(tr("on_sync_running"))
23+
logger.warning(tr("on_sync_running"))
2424

2525
@new_thread('MatrixReceiver')
2626
def run_sync_task():
27+
logger = get_logger()
2728
plg_globals.sync = True
28-
with plg_globals.tLock:
29-
asyncio.run(add_sync_task())
29+
if plg_globals.token_vaild:
30+
with plg_globals.tLock:
31+
logger.info(tr("on_sync_start"))
32+
asyncio.run(add_sync_task())
33+
else:
34+
logger.error(tr("token_mismatch"))
35+
plg_globals.sync = False
3036

3137
async def add_sync_task():
3238
await get_messages()
@@ -55,16 +61,20 @@ async def on_command_stop():
5561

5662
@builder.command("!!msync status")
5763
def show_status():
58-
log_info(f"Receiver: {plg_globals.sync}")
64+
logger = get_logger()
65+
logger.info(f"Receiver: {plg_globals.sync}")
5966
if plg_globals.sync:
60-
log_info(tr("sync_status.running"))
67+
logger.info(tr("sync_status.running"))
6168
else:
62-
log_info(tr("sync_status.not_running"))
69+
logger.info(tr("sync_status.not_running"))
6370

6471
@builder.command("!!msync send <message>")
6572
def on_command_send(src: CommandSource, ctx: CommandContext):
66-
matrix_reporter(ctx["message"])
67-
src.reply(tr("on_send_command"))
73+
if plg_globals.token_vaild:
74+
matrix_reporter(ctx["message"])
75+
src.reply(tr("on_send_command.sending"))
76+
else:
77+
src.reply(tr("on_send_command.failed") + ": " + tr("token_mismatch"))
6878

6979
@builder.command("!!msync reload")
7080
def on_command_reload():

matrix_sync/config/__init__.py

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,24 @@
1+
import os
2+
import matrix_sync.utils.tr as tr
13
import matrix_sync.plg_globals as plg_globals
24

35
from .default import *
46
from ..utils import *
7+
from ..client.init import check_token
8+
from mcdreforged.api.types import PluginServerInterface
59

610

711
async def load_config(server: PluginServerInterface):
812
plg_globals.config = server.load_config_simple('config.json', account_config)
913
if plg_globals.config == account_config:
1014
server.unload_plugin(plgSelf.id)
1115
plg_globals.settings = server.load_config_simple('settings.json', default_settings)
16+
if plg_globals.settings["ver"] != "2.5.1":
17+
plg_globals.settings = None
18+
psi.logger.info(tr("settings_comp_check.failed"))
19+
os.rename(f"{configDir}/settings.json", f"{configDir}/settings.json.bak")
20+
plg_globals.settings = server.load_config_simple('settings.json', default_settings)
1221
if not plg_globals.settings["log_style"]["mcdr"]:
13-
psi.logger.info("Plugin MatrixSync will use its logger, with different format to MCDR.")
22+
psi.logger.info("Plugin MatrixSync will use its logger, different with MCDR.")
23+
if os.path.exists(f"{configDir}/token.json"):
24+
plg_globals.token_vaild = await check_token()

matrix_sync/config/default.py

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,8 @@
1919
},
2020
"log_style": {
2121
"mcdr": False,
22-
"debug": False
22+
"debug": False,
23+
"show_time": False
2324
},
24-
"ver": "2.5.0"
25+
"ver": "2.5.1"
2526
}

0 commit comments

Comments
 (0)