Skip to content

Commit

Permalink
Merge pull request #623 from UnrealMultiple/cai_dev
Browse files Browse the repository at this point in the history
feat(CaiBot):优化在线查询,世界未加载时不再返回空世界名,移除主动绑定,简化Conifg
  • Loading branch information
ACaiCat authored Dec 23, 2024
2 parents a7edb37 + ecf3127 commit 9648dd5
Show file tree
Hide file tree
Showing 5 changed files with 74 additions and 122 deletions.
53 changes: 25 additions & 28 deletions src/CaiBot/Config.cs
Original file line number Diff line number Diff line change
Expand Up @@ -5,9 +5,9 @@ namespace CaiBot;

public class Config
{
private const string Path = "tshock/CaiBot.json";
private const string ConfigPath = "tshock/CaiBot.json";

public static Config config = new ();
public static Config Settings = new ();
[JsonProperty("白名单开关",Order = 1)] public bool WhiteList = true;
[JsonProperty("密钥",Order = 2)] public string Token = "";
[JsonProperty("白名单拦截提示的群号",Order = 3)] public long GroupNumber;
Expand All @@ -21,42 +21,39 @@ public class Config
[JsonProperty("群聊天发送格式",Order = 9)] public string GroupChatFormat = "[{0}]{1}:{2}"; // "[群名]玩家昵称:内容" 额外 {3}:群QQ号 {4}:发送者QQ
[JsonProperty("群聊天自定义群名",Order = 10)] public Dictionary<long, string> CustomGroupName = new ();

public void Write(string path = Path)
/// <summary>
/// 将配置文件写入硬盘
/// </summary>
public void Write()
{
using FileStream fileStream = new (path, FileMode.Create, FileAccess.Write, FileShare.Write);
this.Write(fileStream);
using FileStream fileStream = new(ConfigPath, FileMode.Create, FileAccess.Write, FileShare.Write);
using StreamWriter streamWriter = new(fileStream);
streamWriter.Write(JsonConvert.SerializeObject(this, JsonSettings));
}

private void Write(Stream stream)
/// <summary>
/// 从硬盘读取配置文件
/// </summary>
public void Read()
{
var value = JsonConvert.SerializeObject(this, Formatting.Indented);
using StreamWriter streamWriter = new (stream);
streamWriter.Write(value);
}

public static void Read(string path = Path)
{
var flag = !File.Exists(path);
Config? result;
if (flag)
Config result;
if (!File.Exists(ConfigPath))
{
result = new Config();
result.Write(path);
result.Write();
}
else
{
using FileStream fileStream = new (path, FileMode.Open, FileAccess.Read, FileShare.Read);
result = Read(fileStream);
using FileStream fileStream = new(ConfigPath, FileMode.Open, FileAccess.Read, FileShare.Read);
using StreamReader streamReader = new(fileStream);
result = JsonConvert.DeserializeObject<Config>(streamReader.ReadToEnd(), JsonSettings)!;
}

config = result!;
Settings = result;
}

private static Config? Read(Stream stream)
private static readonly JsonSerializerSettings JsonSettings = new()
{
using StreamReader streamReader = new (stream);
var result = JsonConvert.DeserializeObject<Config>(streamReader.ReadToEnd());

return result;
}
Formatting = Formatting.Indented,
ObjectCreationHandling = ObjectCreationHandling.Replace
};
}
6 changes: 3 additions & 3 deletions src/CaiBot/Login.cs
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ public static bool MessageBuffer_InvokeGetData(Hooks.MessageBuffer.orig_InvokeGe
MessageBuffer instance, ref byte packetId, ref int readOffset, ref int start, ref int length,
ref int messageType, int maxPackets)
{
if (!Config.config.WhiteList)
if (!Config.Settings.WhiteList)
{
return orig(instance, ref packetId, ref readOffset, ref start, ref length, ref messageType, maxPackets);
}
Expand Down Expand Up @@ -57,7 +57,7 @@ public static bool MessageBuffer_InvokeGetData(Hooks.MessageBuffer.orig_InvokeGe

public static void OnGetData(GetDataEventArgs args)
{
if (!Config.config.WhiteList)
if (!Config.Settings.WhiteList)
{
return;
}
Expand Down Expand Up @@ -97,7 +97,7 @@ public static void OnGetData(GetDataEventArgs args)
public static bool CheckWhite(string name, int code)
{
var playerList = TSPlayer.FindByNameOrID("tsn:" + name);
var number = Config.config.GroupNumber;
var number = Config.Settings.GroupNumber;
if (playerList.Count == 0)
{
return false;
Expand Down
45 changes: 16 additions & 29 deletions src/CaiBot/MessageHandler.cs
Original file line number Diff line number Diff line change
Expand Up @@ -38,8 +38,8 @@ public static async Task HandleMessageAsync(string receivedData)
{
case "delserver":
TShock.Log.ConsoleInfo("[CaiAPI]BOT发送解绑命令...");
Config.config.Token = "";
Config.config.Write();
Config.Settings.Token = "";
Config.Settings.Write();
Random rnd = new ();
Plugin.InitCode = rnd.Next(10000000, 99999999);
TShock.Log.ConsoleError($"[CaiBot]您的服务器绑定码为: {Plugin.InitCode}");
Expand All @@ -54,25 +54,25 @@ public static async Task HandleMessageAsync(string receivedData)
{ "tshock_version", TShock.VersionNum.ToString() },
{ "plugin_version", Plugin.VersionNum },
{ "terraria_version", Main.versionNumber },
{ "cai_whitelist", Config.config.WhiteList },
{ "cai_whitelist", Config.Settings.WhiteList },
{ "os", RuntimeInformation.RuntimeIdentifier },
{ "world", TShock.Config.Settings.UseServerName ? TShock.Config.Settings.ServerName : Main.worldName },
{ "sync_group_chat", Config.config.SyncChatFromGroup },
{ "sync_server_chat", Config.config.SyncChatFromServer },
{ "sync_group_chat", Config.Settings.SyncChatFromGroup },
{ "sync_server_chat", Config.Settings.SyncChatFromServer },
{ "group", (long) jsonObject["group"]! }
};
await SendDateAsync(JsonConvert.SerializeObject(result));
break;
case "groupid":
var groupId = (long) jsonObject["groupid"]!;
TShock.Log.ConsoleInfo($"[CaiAPI]群号获取成功: {groupId}");
if (Config.config.GroupNumber != 0L)
if (Config.Settings.GroupNumber != 0L)
{
TShock.Log.ConsoleWarn($"[CaiAPI]检测到你在配置文件中已设置群号[{Config.config.GroupNumber}],BOT自动获取的群号将被忽略!");
TShock.Log.ConsoleWarn($"[CaiAPI]检测到你在配置文件中已设置群号[{Config.Settings.GroupNumber}],BOT自动获取的群号将被忽略!");
}
else
{
Config.config.GroupNumber = groupId;
Config.Settings.GroupNumber = groupId;
}

break;
Expand All @@ -85,31 +85,18 @@ public static async Task HandleMessageAsync(string receivedData)
await SendDateAsync(JsonConvert.SerializeObject(result));
break;
case "online":
var onlineResult = "";
var onlineResult = new StringBuilder();
if (TShock.Utils.GetActivePlayerCount() == 0)
{
onlineResult = "当前没有玩家在线捏";
onlineResult.AppendLine("没有玩家在线捏...");
}
else
{
onlineResult += $"在线的玩家({TShock.Utils.GetActivePlayerCount()}/{TShock.Config.Settings.MaxSlots})\n";


List<string> players = new ();

foreach (var ply in TShock.Players)
{
if (ply is { Active: true })
{
players.Add(ply.Name);
}
}

onlineResult += string.Join(',', players);
onlineResult.AppendLine($"在线玩家({TShock.Utils.GetActivePlayerCount()}/{TShock.Config.Settings.MaxSlots})");
onlineResult.AppendLine(string.Join(',', TShock.Players.Where(x=>x!=null && x.Active).Select(x=>x.Name)));
}

List<string> onlineProcessList = new ();

#region 进度查询

if (!NPC.downedSlimeKing)
Expand Down Expand Up @@ -181,8 +168,8 @@ public static async Task HandleMessageAsync(string receivedData)
result = new RestObject
{
{ "type", "online" },
{ "result", onlineResult },
{ "worldname", Main.worldName },
{ "result", onlineResult.ToString()}, // “怎么有种我是男的的感觉” -- 张芷睿大人 (24.12.22)
{ "worldname", string.IsNullOrEmpty(Main.worldName) ? "地图还没加载捏~" : Main.worldName },
{ "process", onlineProcess },
{ "group", (long) jsonObject["group"]! }
};
Expand Down Expand Up @@ -546,12 +533,12 @@ public static async Task HandleMessageAsync(string receivedData)
var chatText = (string) jsonObject["chat_text"]!;
var groupNumber = (long) jsonObject["group_id"]!;
var senderId = (long) jsonObject["sender_id"]!;
if (Config.config.CustomGroupName.TryGetValue(groupNumber, out var value))
if (Config.Settings.CustomGroupName.TryGetValue(groupNumber, out var value))
{
groupName = value;
}

TShock.Utils.Broadcast(string.Format(Config.config.GroupChatFormat, groupName, nickname, chatText, groupNumber, senderId), Color.White);
TShock.Utils.Broadcast(string.Format(Config.Settings.GroupChatFormat, groupName, nickname, chatText, groupNumber, senderId), Color.White);
break;
}
}
Expand Down
Loading

0 comments on commit 9648dd5

Please sign in to comment.