耦合MasterCommand, Bot

This commit is contained in:
milimoe 2024-03-22 23:11:17 +08:00
parent 4fb0f50ffb
commit e1279906c1
Signed by: milimoe
GPG Key ID: 05D280912DA6C69E
12 changed files with 586 additions and 733 deletions

View File

@ -1,4 +1,5 @@
@echo off @echo off
call cd src call cd src
call dotnet publish -c Release -r linux-x64 call dotnet clean
call dotnet build -c Release -r linux-x64
pause pause

5
build-release-x64.bat Normal file
View File

@ -0,0 +1,5 @@
@echo off
call cd src
call dotnet clean
call dotnet build -c Release -r win-x64
pause

5
publish-linux-x64.bat Normal file
View File

@ -0,0 +1,5 @@
@echo off
call cd src
call dotnet clean
call dotnet publish -c Release -r linux-x64
pause

5
publish-release-x64.bat Normal file
View File

@ -0,0 +1,5 @@
@echo off
call cd src
call dotnet clean
call dotnet publish -c Release -r win-x64
pause

View File

@ -1,10 +1,195 @@
using Milimoe.RainBOT.Settings; using System.Text.RegularExpressions;
using Milimoe.OneBot.Framework;
using Milimoe.OneBot.Framework.Utility;
using Milimoe.OneBot.Model.Content;
using Milimoe.OneBot.Model.Message;
using Milimoe.RainBOT.Settings;
namespace Milimoe.RainBOT.Command namespace Milimoe.RainBOT.Command
{ {
public class MasterCommand public class MasterCommand
{ {
public static string Execute(string command, string part, params string[] args) public static void Execute(string command, long user_id, bool onOSMCore, long target_id, bool send_group)
{
// OSM指令
if (GeneralSettings.IsRun && command.Contains(".osm info"))
{
// OSM核心状态
string msg = "OSM插件运行状态";
if ((send_group && onOSMCore) || !send_group)
{
if (onOSMCore)
{
msg += "\r\n本群已启用OSM核心";
}
if (GeneralSettings.IsRepeat)
{
msg += "\r\n随机复读开启";
msg += $"\r\n随机复读概率{GeneralSettings.PRepeat}%" +
$"\r\n随机复读延迟区间{GeneralSettings.RepeatDelay[0]}至{GeneralSettings.RepeatDelay[1]}秒";
}
else msg += "\r\n随机复读关闭";
if (GeneralSettings.IsOSM)
{
msg += "\r\n随机OSM开启";
msg += $"\r\n随机OSM概率{GeneralSettings.POSM}%";
}
else msg += "\r\n随机OSM关闭";
if (GeneralSettings.IsSayNo)
{
msg += "\r\n随机反驳不开启";
msg += $"\r\n随机反驳不概率{GeneralSettings.PSayNo}%";
}
else msg += "\r\n随机反驳不关闭";
if (GeneralSettings.IsMute)
{
msg += "\r\n禁言抽奖开启";
msg += $"\r\n禁言抽奖时长区间{GeneralSettings.MuteTime[0]}至{GeneralSettings.MuteTime[1]}秒";
}
else msg += "\r\n禁言抽奖关闭";
}
else
{
msg += "\r\n本群未启用OSM核心";
}
_ = send_group ? Bot.SendGroupMessage(target_id, "OSM状态", msg) : Bot.SendFriendMessage(target_id, "OSM状态", msg);
}
else if (GeneralSettings.IsRun && command.Contains(".osm stop"))
{
if (user_id == GeneralSettings.Master)
{
string result = Execute_Worker(".osm stop", "");
_ = send_group ? Bot.SendGroupMessage(target_id, "OSM指令", result) : Bot.SendFriendMessage(target_id, "OSM指令", result);
}
else Access_Denied(send_group, target_id);
}
else if (!GeneralSettings.IsRun && command.Contains(".osm start"))
{
if (user_id == GeneralSettings.Master)
{
string result = Execute_Worker(".osm start", "");
_ = send_group ? Bot.SendGroupMessage(target_id, "OSM指令", result) : Bot.SendFriendMessage(target_id, "OSM指令", result);
}
else Access_Denied(send_group, target_id);
}
else if ((command.Contains(".osm set admin") || command.Contains(".osm set unadmin")) && send_group)
{
if (user_id == GeneralSettings.Master)
{
bool enable = !command.Contains("unadmin");
string str = command.Replace(".osm set admin", "").Replace(".osm set unadmin", "").Trim();
string[] strs = Regex.Split(str, @"\s+");
if (strs.Length > 0)
{
str = strs[0].Replace(@"@", "").Trim();
if (long.TryParse(str, out long qq))
{
SetGroupAdminContent content = new(target_id, qq, enable);
_ = Bot.SendMessage(SupportedAPI.set_group_admin, target_id, "OSM指令", content, send_group);
}
else _ = Bot.SendGroupMessage(target_id, "OSM指令", Execute_Worker(".osm set", "admin", strs.Length > 1 ? strs[1..] : []));
}
else _ = Bot.SendGroupMessage(target_id, "OSM指令", Execute_Worker(".osm set", "admin", strs.Length > 1 ? strs[1..] : []));
}
else Access_Denied(send_group, target_id);
}
else if (command.Contains(".osm mutegroup"))
{
TaskUtility.NewTask(async () => await Bot.MuteGroup(user_id, target_id, command));
}
else if (command.Contains(".osm mute") && send_group)
{
TaskUtility.NewTask(async () => await Bot.Mute(user_id, target_id, command));
}
else if (command.Contains(".osm refresh"))
{
if (user_id == GeneralSettings.Master)
{
TaskUtility.NewTask(async () =>
{
await Bot.GetGroups();
await Bot.GetGroupMembers();
string text = "刷新缓存完成。请注意,刷新缓存会导致正在禁言中的成员无法通过私聊忏悔命令解禁。";
_ = send_group ? Bot.SendGroupMessage(target_id, "OSM指令", text) : Bot.SendFriendMessage(target_id, "OSM指令", text);
});
}
else Access_Denied(send_group, target_id);
}
else if (command.Contains(".osm reload"))
{
if (user_id == GeneralSettings.Master)
{
GeneralSettings.LoadSetting();
string text = "参数设定以及权限组重新加载完成。";
_ = send_group ? Bot.SendGroupMessage(target_id, "OSM指令", text) : Bot.SendFriendMessage(target_id, "OSM指令", text);
}
else Access_Denied(send_group, target_id);
}
else if (command.Contains(".osm set"))
{
if (user_id == GeneralSettings.Master)
{
string str = command.Replace(".osm set", "").Trim();
string[] strs = Regex.Split(str, @"\s+");
string result = Execute_Worker(".osm set", strs[0], strs.Length > 1 ? strs[1..] : []);
_ = send_group ? Bot.SendGroupMessage(target_id, "OSM指令", result) : Bot.SendFriendMessage(target_id, "OSM指令", result);
}
else Access_Denied(send_group, target_id);
}
else if (command.Contains(".osm sendall"))
{
TaskUtility.NewTask(async () =>
{
if (user_id == GeneralSettings.Master)
{
string str = command.Replace(".osm sendall", "").Trim();
foreach (long group_id in Bot.Groups.Select(g => g.group_id))
{
await Bot.SendGroupMessage(group_id, "OSM指令", str);
}
}
else Access_Denied(send_group, target_id);
});
}
else if (command.Contains(".osm send"))
{
TaskUtility.NewTask(async () =>
{
if (user_id == GeneralSettings.Master)
{
string str = command.Replace(".osm send", "").Trim();
string[] strs = Regex.Split(str, @"\s+");
if (long.TryParse(strs[0], out long group_id) && strs.Length > 1)
{
await Bot.SendGroupMessage(group_id, "OSM指令", string.Join(" ", strs[1..]));
}
}
else Access_Denied(send_group, target_id);
});
}
else
{
// OSM核心信息
if (send_group)
{
GroupMessageContent content = new(target_id);
content.message.Add(new TextMessage(OSMCore.Info));
content.message.Add(new ImageMessage("file:///" + AppDomain.CurrentDomain.BaseDirectory.ToString() + @"img\raincandy.jpg"));
_ = Bot.SendGroupMessage(target_id, "OSM核心", content);
}
else
{
FriendMessageContent content = new(target_id);
content.message.Add(new TextMessage(OSMCore.Info));
content.message.Add(new ImageMessage("file:///" + AppDomain.CurrentDomain.BaseDirectory.ToString() + @"img\raincandy.jpg"));
_ = Bot.SendFriendMessage(target_id, "OSM核心", content);
}
return;
}
return;
}
public static string Execute_Worker(string command, string part, params string[] args)
{ {
string msg; string msg;
bool isadd; bool isadd;
@ -18,14 +203,6 @@ namespace Milimoe.RainBOT.Command
case ".osm start": case ".osm start":
GeneralSettings.IsRun = true; GeneralSettings.IsRun = true;
return "OSM Core服务已启动。"; return "OSM Core服务已启动。";
case ".osm send":
if (long.TryParse(part, out long _) && args.Length > 0)
{
return string.Join(" ", args);
}
break;
case ".osm sendall":
return part;
case ".osm set": case ".osm set":
bool status; bool status;
switch (part) switch (part)
@ -295,6 +472,12 @@ namespace Milimoe.RainBOT.Command
return "OSM Core指令格式不正确或传入的参数不支持。\r\n格式.osm <command> [part] [args...]"; return "OSM Core指令格式不正确或传入的参数不支持。\r\n格式.osm <command> [part] [args...]";
} }
public static void Access_Denied(bool send_group, long target_id)
{
string access_denied = "你没有权限使用此指令。";
_ = send_group ? Bot.SendGroupMessage(target_id, "OSM指令", access_denied) : Bot.SendFriendMessage(target_id, "OSM指令", access_denied);
}
public static string UpdateValue(string part, string old_value, string new_value, ConsoleColor color = ConsoleColor.Cyan) public static string UpdateValue(string part, string old_value, string new_value, ConsoleColor color = ConsoleColor.Cyan)
{ {
string msg = "OSM Core" + part + "已调整为:" + new_value + "(原始值:" + old_value + ")。"; string msg = "OSM Core" + part + "已调整为:" + new_value + "(原始值:" + old_value + ")。";

View File

@ -1,13 +1,9 @@
using System.Text.RegularExpressions; using Milimoe.OneBot.Framework;
using Milimoe.OneBot.Framework;
using Milimoe.OneBot.Framework.Interface;
using Milimoe.OneBot.Framework.Utility; using Milimoe.OneBot.Framework.Utility;
using Milimoe.OneBot.Model.Content; using Milimoe.OneBot.Model.Content;
using Milimoe.OneBot.Model.Event; using Milimoe.OneBot.Model.Event;
using Milimoe.OneBot.Model.Message;
using Milimoe.OneBot.Model.Other; using Milimoe.OneBot.Model.Other;
using Milimoe.OneBot.Model.QuickReply; using Milimoe.OneBot.Model.QuickReply;
using Milimoe.OneBot.Utility;
using Milimoe.RainBOT.Command; using Milimoe.RainBOT.Command;
using Milimoe.RainBOT.Settings; using Milimoe.RainBOT.Settings;
@ -37,132 +33,19 @@ namespace Milimoe.RainBOT.ListeningTask
{ {
if (e.user_id != GeneralSettings.Master && e.CheckThrow(10, out dice)) if (e.user_id != GeneralSettings.Master && e.CheckThrow(10, out dice))
{ {
ColorfulCheckPass(sender, "反驳是", dice, 40); Bot.ColorfulCheckPass(sender, "反驳是", dice, 40);
_ = Post(e, "随机反驳是", "是你的头"); _ = Bot.SendFriendMessage(e.user_id, "随机反驳是", "是你的头");
} }
else if (e.user_id == GeneralSettings.Master) else if (e.user_id == GeneralSettings.Master)
{ {
_ = Post(e, "随机反驳是", "是你的头"); _ = Bot.SendFriendMessage(e.user_id, "随机反驳是", "是你的头");
} }
} }
// OSM指令 // OSM指令
if (e.detail.Length >= 4 && e.detail[..4] == ".osm") if (e.detail.Length >= 4 && e.detail[..4] == ".osm")
{ {
if (GeneralSettings.IsRun && e.detail.Contains(".osm info")) MasterCommand.Execute(e.detail, e.user_id, false, e.user_id, false);
{
// OSM核心状态
string msg = "OSM插件运行状态" + "\r\n本群已启用OSM核心";
if (GeneralSettings.IsRepeat)
{
msg += "\r\n随机复读开启";
msg += $"\r\n随机复读概率{GeneralSettings.PRepeat}%" +
$"\r\n随机复读延迟区间{GeneralSettings.RepeatDelay[0]}至{GeneralSettings.RepeatDelay[1]}秒";
}
else msg += "\r\n随机复读关闭";
if (GeneralSettings.IsOSM)
{
msg += "\r\n随机OSM开启";
msg += $"\r\n随机OSM概率{GeneralSettings.POSM}%";
}
else msg += "\r\n随机OSM关闭";
if (GeneralSettings.IsSayNo)
{
msg += "\r\n随机反驳不开启";
msg += $"\r\n随机反驳不概率{GeneralSettings.PSayNo}%";
}
else msg += "\r\n随机反驳不关闭";
if (GeneralSettings.IsMute)
{
msg += "\r\n禁言抽奖开启";
msg += $"\r\n禁言抽奖时长区间{GeneralSettings.MuteTime[0]}至{GeneralSettings.MuteTime[1]}秒";
}
else msg += "\r\n禁言抽奖关闭";
_ = Post(e, "OSM状态", msg);
}
else if (GeneralSettings.IsRun && e.detail.Contains(".osm stop"))
{
if (e.user_id == GeneralSettings.Master)
{
string result = MasterCommand.Execute(".osm stop", "");
_ = Post(e, "OSM指令", result);
}
else _ = Post(e, "OSM指令", "你没有权限使用此指令。");
}
else if (!GeneralSettings.IsRun && e.detail.Contains(".osm start"))
{
if (e.user_id == GeneralSettings.Master)
{
string result = MasterCommand.Execute(".osm start", "");
_ = Post(e, "OSM指令", result);
}
else _ = Post(e, "OSM指令", "你没有权限使用此指令。");
}
else if (e.detail.Contains(".osm refresh"))
{
if (e.user_id == GeneralSettings.Master)
{
TaskUtility.NewTask(async () =>
{
await Bot.GetGroups();
await Bot.GetGroupMembers();
await Post(e, "OSM指令", "刷新缓存完成。");
});
}
else _ = Post(e, "OSM指令", "你没有权限使用此指令。");
}
else if (e.detail.Contains(".osm set"))
{
if (e.user_id == GeneralSettings.Master)
{
string str = e.detail.Replace(".osm set", "").Trim();
string[] strs = Regex.Split(str, @"\s+");
string result = MasterCommand.Execute(".osm set", strs[0], strs.Length > 1 ? strs[1..] : []);
_ = Post(e, "OSM指令", result);
}
else _ = Post(e, "OSM指令", "你没有权限使用此指令。");
}
else if (e.detail.Contains(".osm send"))
{
if (e.user_id == GeneralSettings.Master)
{
string str = e.detail.Replace(".osm send", "").Trim();
string[] strs = Regex.Split(str, @"\s+");
string result = MasterCommand.Execute(".osm send", strs[0], str.Replace(strs[0], "").Trim());
if (long.TryParse(strs[0], out long group_id))
{
GroupMessageContent content = new(group_id);
content.message.Add(new TextMessage(result));
_ = Post(SupportedAPI.send_group_msg, group_id, "OSM指令", content);
}
}
else _ = Post(e, "OSM指令", "你没有权限使用此指令。");
}
else if (e.detail.Contains(".osm sendall"))
{
if (e.user_id == GeneralSettings.Master)
{
string str = e.detail.Replace(".osm send", "").Trim();
string[] strs = Regex.Split(str, @"\s+");
string result = MasterCommand.Execute(".osm sendall", strs[0]);
foreach (long group_id in Bot.Groups.Select(g => g.group_id))
{
GroupMessageContent content = new(group_id);
content.message.Add(new TextMessage(result));
_ = Post(SupportedAPI.send_group_msg, group_id, "OSM指令", content);
}
}
else _ = Post(e, "OSM指令", "你没有权限使用此指令。");
}
else
{
// OSM核心信息
FriendMessageContent content = new(e.user_id);
content.message.Add(new TextMessage($"OSM Core {OSMCore.version} {OSMCore.version2}\r\nAuthor: Milimoe\r\nBuilt on {OSMCore.time}\r\nSee: https://github.com/milimoe"));
content.message.Add(new ImageMessage("file:///" + AppDomain.CurrentDomain.BaseDirectory.ToString() + @"img\raincandy.jpg"));
_ = Post(e, "OSM核心", content);
return;
}
return; return;
} }
@ -170,20 +53,20 @@ namespace Milimoe.RainBOT.ListeningTask
{ {
TaskUtility.NewTask(async () => TaskUtility.NewTask(async () =>
{ {
if (!await CheckBlackList(e)) return; if (!await Bot.CheckBlackList(false, e.user_id, e.user_id)) return;
string msg = ""; string msg = "";
foreach (long group_id in Bot.Groups.Select(g => g.group_id)) foreach (long group_id in Bot.Groups.Select(g => g.group_id))
{ {
if (Bot.BotIsAdmin(group_id) && MuteRecall.Muted[group_id].TryGetValue(e.user_id, out long operator_id) && operator_id == Bot.BotQQ) if (Bot.BotIsAdmin(group_id) && MuteRecall.Muted[group_id].TryGetValue(e.user_id, out long operator_id) && operator_id == Bot.BotQQ)
{ {
MuteRecall.Muted[group_id].Remove(e.user_id); MuteRecall.Muted[group_id].Remove(e.user_id);
await GroupMessageTask.Post(SupportedAPI.set_group_ban, group_id, "忏悔", new SetGroupBanContent(group_id, e.user_id, 0)); await Bot.SendMessage(SupportedAPI.set_group_ban, group_id, "忏悔", new SetGroupBanContent(group_id, e.user_id, 0), true);
if (msg != "") msg += "\r\n"; if (msg != "") msg += "\r\n";
msg += $"[{group_id}] 忏悔成功!!希望你保持纯真,保持野性的美。"; msg += $"[{group_id}] 忏悔成功!!希望你保持纯真,保持野性的美。";
} }
} }
if (msg == "") msg = "你无需忏悔。请注意:我不能帮你解除由管理员手动操作的禁言。"; if (msg == "") msg = "你无需忏悔。请注意:我不能帮你解除由管理员手动操作的禁言。";
await Post(e, "忏悔", msg); await Bot.SendFriendMessage(e.user_id, "忏悔", msg);
}); });
return; return;
} }
@ -195,116 +78,5 @@ namespace Milimoe.RainBOT.ListeningTask
Console.ForegroundColor = ConsoleColor.Gray; Console.ForegroundColor = ConsoleColor.Gray;
} }
} }
public static async Task<bool> CheckBlackList(FriendMessageEvent e)
{
// 黑名单
if (e.user_id == GeneralSettings.Master) return true;
if (!BlackList.Times.ContainsKey(e.user_id))
{
BlackList.Times.Add(e.user_id, 1);
return true;
}
else if (BlackList.Times.TryGetValue(e.user_id, out long bltimes) && bltimes > 5)
{
return false;
}
else if (++bltimes == 5)
{
BlackList.Times[e.user_id] = 6;
FriendMessageContent content = new(e.user_id);
content.message.Add(new AtMessage(e.user_id));
content.message.Add(new TextMessage("警告你已因短时间内频繁操作被禁止使用BOT指令" + (GeneralSettings.BlackFrozenTime / 60) + "分钟" + (GeneralSettings.BlackFrozenTime % 60) + "秒。"));
_ = Task.Run(async () =>
{
await Task.Delay(1000 * GeneralSettings.BlackFrozenTime);
BlackList.Times.Remove(e.user_id);
});
await Post(e, "黑名单", content);
return false;
}
else
{
BlackList.Times[e.user_id] = bltimes;
return true;
}
}
public static void ColorfulCheckPass(Sender sender, string function, long dice, long probability, int delay = 0)
{
Console.ForegroundColor = ConsoleColor.Green;
if (delay > 0)
{
Console.Write($"{DateTime.Now:yyyy/MM/dd HH:mm:ss} ");
}
Console.Write($"{sender.user_id}{(sender.card != "" ? sender.card : sender.nickname)})的{function}检定通过:{dice} < {probability}");
if (delay > 0)
{
Console.Write(" -> " + delay + "秒后执行");
}
Console.WriteLine();
Console.ForegroundColor = ConsoleColor.Gray;
}
public static async Task Post(FriendMessageEvent e, string function, string text, int delay = 0)
{
string result = (await e.SendMessage(text, delay)).ReasonPhrase ?? "";
Console.Write($"{DateTime.Now:yyyy/MM/dd HH:mm:ss} F/");
Console.ForegroundColor = ConsoleColor.Yellow;
Console.Write(function);
Console.ForegroundColor = ConsoleColor.Gray;
Console.WriteLine($" P/{e.user_id} <- {text} {result}");
}
public static async Task Post(FriendMessageEvent e, string function, FriendMessageContent content, int delay = 0)
{
string result = (await e.SendMessage(content, delay)).ReasonPhrase ?? "";
Console.Write($"{DateTime.Now:yyyy/MM/dd HH:mm:ss} F/");
Console.ForegroundColor = ConsoleColor.Yellow;
Console.Write(function);
Console.ForegroundColor = ConsoleColor.Gray;
if (!GeneralSettings.IsDebug)
{
Console.WriteLine($" P/{e.user_id} <- {content.detail} {result}");
}
else
{
Console.WriteLine($" P/{e.user_id} <- {JsonTools.GetString(content)} {result}");
}
}
public static async Task Post(string api, long user_id, string function, IContent content)
{
string result = (await HTTPPost.Post(api, content)).ReasonPhrase ?? "";
Console.Write($"{DateTime.Now:yyyy/MM/dd HH:mm:ss} F/");
Console.ForegroundColor = ConsoleColor.Yellow;
Console.Write(function);
Console.ForegroundColor = ConsoleColor.Gray;
if (!GeneralSettings.IsDebug)
{
Console.WriteLine($" P/{user_id} <- {content.detail} {result}");
}
else
{
Console.WriteLine($" P/{user_id} <- {HTTPHelper.GetJsonString(api, content)} {result}");
}
}
public static async Task Post(string api, long user_id, string function, IEnumerable<IContent> contents)
{
await HTTPPost.Post(api, contents);
Console.Write($"{DateTime.Now:yyyy/MM/dd HH:mm:ss} F/");
Console.ForegroundColor = ConsoleColor.Yellow;
Console.Write(function);
Console.ForegroundColor = ConsoleColor.Gray;
if (!GeneralSettings.IsDebug)
{
Console.WriteLine($" P/{user_id} <- 已在后台执行");
}
else
{
Console.WriteLine($" P/{user_id} <- 已在后台执行");
}
}
} }
} }

View File

@ -1,5 +1,4 @@
using System.Reflection; using Milimoe.OneBot.Framework;
using Milimoe.OneBot.Framework;
using Milimoe.OneBot.Model.Content; using Milimoe.OneBot.Model.Content;
using Milimoe.OneBot.Model.Event; using Milimoe.OneBot.Model.Event;
using Milimoe.OneBot.Model.Other; using Milimoe.OneBot.Model.Other;
@ -27,7 +26,7 @@ namespace Milimoe.RainBOT.ListeningTask
MuteRecall.Muted[e.group_id].Add(e.user_id, GeneralSettings.Master); MuteRecall.Muted[e.group_id].Add(e.user_id, GeneralSettings.Master);
SetGroupBanContent content_unmute_master = new(e.group_id, GeneralSettings.Master, 0); SetGroupBanContent content_unmute_master = new(e.group_id, GeneralSettings.Master, 0);
SetGroupBanContent content_mute_operator = new(e.group_id, e.operator_id, 60); SetGroupBanContent content_mute_operator = new(e.group_id, e.operator_id, 60);
await GroupMessageTask.Post(SupportedAPI.set_group_ban, e.group_id, "反制禁言", [content_unmute_master, content_mute_operator]); await Bot.SendMessage(SupportedAPI.set_group_ban, e.group_id, "反制禁言", [content_unmute_master, content_mute_operator], true);
Member sender = Bot.GetMember(e.group_id, e.operator_id); Member sender = Bot.GetMember(e.group_id, e.operator_id);
await e.SendMessage($"检测到主人被{sender.user_id}{(sender.card != "" ? sender.card : sender.nickname)})禁言!"); await e.SendMessage($"检测到主人被{sender.user_id}{(sender.card != "" ? sender.card : sender.nickname)})禁言!");
} }

View File

@ -1,14 +1,10 @@
using System.Linq; using Milimoe.OneBot.Framework;
using System.Text.RegularExpressions;
using Milimoe.OneBot.Framework;
using Milimoe.OneBot.Framework.Interface;
using Milimoe.OneBot.Framework.Utility; using Milimoe.OneBot.Framework.Utility;
using Milimoe.OneBot.Model.Content; using Milimoe.OneBot.Model.Content;
using Milimoe.OneBot.Model.Event; using Milimoe.OneBot.Model.Event;
using Milimoe.OneBot.Model.Message; using Milimoe.OneBot.Model.Message;
using Milimoe.OneBot.Model.Other; using Milimoe.OneBot.Model.Other;
using Milimoe.OneBot.Model.QuickReply; using Milimoe.OneBot.Model.QuickReply;
using Milimoe.OneBot.Utility;
using Milimoe.RainBOT.Command; using Milimoe.RainBOT.Command;
using Milimoe.RainBOT.Settings; using Milimoe.RainBOT.Settings;
@ -42,189 +38,25 @@ namespace Milimoe.RainBOT.ListeningTask
// OSM指令 // OSM指令
if (e.detail.Length >= 4 && e.detail[..4] == ".osm") if (e.detail.Length >= 4 && e.detail[..4] == ".osm")
{ {
if (GeneralSettings.IsRun && e.detail.Contains(".osm info")) MasterCommand.Execute(e.detail, e.user_id, onOSMCore, e.group_id, true);
{
// OSM核心状态
string msg = "OSM插件运行状态";
if (onOSMCore)
{
msg += "\r\n本群已启用OSM核心";
if (GeneralSettings.IsRepeat)
{
msg += "\r\n随机复读开启";
msg += $"\r\n随机复读概率{GeneralSettings.PRepeat}%" +
$"\r\n随机复读延迟区间{GeneralSettings.RepeatDelay[0]}至{GeneralSettings.RepeatDelay[1]}秒";
}
else msg += "\r\n随机复读关闭";
if (GeneralSettings.IsOSM)
{
msg += "\r\n随机OSM开启";
msg += $"\r\n随机OSM概率{GeneralSettings.POSM}%";
}
else msg += "\r\n随机OSM关闭";
if (GeneralSettings.IsSayNo)
{
msg += "\r\n随机反驳不开启";
msg += $"\r\n随机反驳不概率{GeneralSettings.PSayNo}%";
}
else msg += "\r\n随机反驳不关闭";
if (GeneralSettings.IsMute)
{
msg += "\r\n禁言抽奖开启";
msg += $"\r\n禁言抽奖时长区间{GeneralSettings.MuteTime[0]}至{GeneralSettings.MuteTime[1]}秒";
}
else msg += "\r\n禁言抽奖关闭";
}
else
{
msg += "\r\n本群未启用OSM核心";
}
_ = Post(e, "OSM状态", msg);
}
else if (GeneralSettings.IsRun && e.detail.Contains(".osm stop"))
{
if (e.user_id == GeneralSettings.Master)
{
string result = MasterCommand.Execute(".osm stop", "");
_ = Post(e, "OSM指令", result);
}
else _ = Post(e, "OSM指令", "你没有权限使用此指令。");
}
else if (!GeneralSettings.IsRun && e.detail.Contains(".osm start"))
{
if (e.user_id == GeneralSettings.Master)
{
string result = MasterCommand.Execute(".osm start", "");
_ = Post(e, "OSM指令", result);
}
else _ = Post(e, "OSM指令", "你没有权限使用此指令。");
}
else if (e.detail.Contains(".osm set admin") || e.detail.Contains(".osm set unadmin"))
{
if (e.user_id == GeneralSettings.Master)
{
bool enable = !e.detail.Contains("unadmin");
string str = e.detail.Replace(".osm set admin", "").Replace(".osm set unadmin", "").Trim();
string[] strs = Regex.Split(str, @"\s+");
if (strs.Length > 0)
{
str = strs[0].Replace(@"@", "").Trim();
if (long.TryParse(str, out long qq))
{
SetGroupAdminContent content = new(e.group_id, qq, enable);
_ = Post(SupportedAPI.set_group_admin, e.group_id, "OSM指令", content);
}
else _ = Post(e, "OSM指令", MasterCommand.Execute(".osm set", "admin", strs.Length > 1 ? strs[1..] : []));
}
else _ = Post(e, "OSM指令", MasterCommand.Execute(".osm set", "admin", strs.Length > 1 ? strs[1..] : []));
}
else _ = Post(e, "OSM指令", "你没有权限使用此指令。");
}
else if (e.detail.Contains(".osm mutegroup"))
{
TaskUtility.NewTask(async () => await MuteGroup(e));
}
else if (e.detail.Contains(".osm mute"))
{
TaskUtility.NewTask(async () => await Mute(e));
}
else if (e.detail.Contains(".osm refresh"))
{
if (e.user_id == GeneralSettings.Master)
{
TaskUtility.NewTask(async () =>
{
await Bot.GetGroups();
await Bot.GetGroupMembers();
await Post(e, "OSM指令", "刷新缓存完成。请注意,刷新缓存会导致正在禁言中的成员无法通过私聊忏悔命令解禁。");
});
}
else _ = Post(e, "OSM指令", "你没有权限使用此指令。");
}
else if (e.detail.Contains(".osm reload"))
{
if (e.user_id == GeneralSettings.Master)
{
GeneralSettings.LoadSetting();
_ = Post(e, "OSM指令", "参数设定以及权限组重新加载完成。");
}
else _ = Post(e, "OSM指令", "你没有权限使用此指令。");
}
else if (e.detail.Contains(".osm set"))
{
if (e.user_id == GeneralSettings.Master)
{
string str = e.detail.Replace(".osm set", "").Trim();
string[] strs = Regex.Split(str, @"\s+");
string result = MasterCommand.Execute(".osm set", strs[0], strs.Length > 1 ? strs[1..] : []);
_ = Post(e, "OSM指令", result);
}
else _ = Post(e, "OSM指令", "你没有权限使用此指令。");
}
else if (e.detail.Contains(".osm sendall"))
{
TaskUtility.NewTask(async () =>
{
if (e.user_id == GeneralSettings.Master)
{
string str = e.detail.Replace(".osm sendall", "").Trim();
string result = MasterCommand.Execute(".osm sendall", str);
foreach (long group_id in Bot.Groups.Select(g => g.group_id))
{
GroupMessageContent content = new(group_id);
content.message.Add(new TextMessage(result));
await Post(SupportedAPI.send_group_msg, group_id, "OSM指令", content);
}
}
else await Post(e, "OSM指令", "你没有权限使用此指令。");
});
}
else if (e.detail.Contains(".osm send"))
{
TaskUtility.NewTask(async () =>
{
if (e.user_id == GeneralSettings.Master)
{
string str = e.detail.Replace(".osm send", "").Trim();
string[] strs = Regex.Split(str, @"\s+");
string result = MasterCommand.Execute(".osm send", strs[0], str.Replace(strs[0], "").Trim());
if (long.TryParse(strs[0], out long group_id))
{
GroupMessageContent content = new(group_id);
content.message.Add(new TextMessage(result));
await Post(SupportedAPI.send_group_msg, group_id, "OSM指令", content);
}
}
else await Post(e, "OSM指令", "你没有权限使用此指令。");
});
}
else
{
// OSM核心信息
GroupMessageContent content = new(e.group_id);
content.message.Add(new TextMessage(OSMCore.Info));
content.message.Add(new ImageMessage("file:///" + AppDomain.CurrentDomain.BaseDirectory.ToString() + @"img\raincandy.jpg"));
_ = Post(e, "OSM核心", content);
return;
}
return; return;
} }
if (e.detail.Length >= 5 && (e.detail[..5] == "禁言所有人" || e.detail[..5] == "解禁所有人") && e.user_id == GeneralSettings.Master && Bot.GroupMembers.TryGetValue(e.group_id, out List<Member>? members) && members != null) if (e.detail.Length >= 5 && (e.detail[..5] == "禁言所有人" || e.detail[..5] == "解禁所有人") && (e.user_id == GeneralSettings.Master || GeneralSettings.UnMuteAccessGroup.Union(GeneralSettings.MuteAccessGroup).Contains(e.user_id)) && Bot.GroupMembers.TryGetValue(e.group_id, out List<Member>? members) && members != null)
{ {
TaskUtility.NewTask(async () => await Mute(e, members.Where(m => m.user_id != GeneralSettings.Master).Select(m => m.user_id))); TaskUtility.NewTask(async () => await Bot.Mute(e.user_id, e.group_id, e.detail, members.Where(m => m.user_id != GeneralSettings.Master).Select(m => m.user_id)));
return; return;
} }
if (e.detail != "禁言抽奖" && e.detail.Length >= 2 && MuteCommands.Any(e.detail[..2].Contains)) if (e.detail != "禁言抽奖" && e.detail.Length >= 2 && MuteCommands.Any(e.detail[..2].Contains))
{ {
TaskUtility.NewTask(async () => await Mute(e)); TaskUtility.NewTask(async () => await Bot.Mute(e.user_id, e.group_id, e.detail));
return; return;
} }
if (e.detail.Length >= 4 && e.detail[..4] == "跨群禁言") if (e.detail.Length >= 4 && e.detail[..4] == "跨群禁言")
{ {
TaskUtility.NewTask(async () => await MuteGroup(e)); TaskUtility.NewTask(async () => await Bot.MuteGroup(e.user_id, e.group_id, e.detail));
return; return;
} }
@ -234,8 +66,8 @@ namespace Milimoe.RainBOT.ListeningTask
ReplyMessage reply = (ReplyMessage)e.message.Where(m => m.type == "reply").First(); ReplyMessage reply = (ReplyMessage)e.message.Where(m => m.type == "reply").First();
if (int.TryParse(reply.data.id, out int id)) if (int.TryParse(reply.data.id, out int id))
{ {
TaskUtility.NewTask(async () => await Post(SupportedAPI.delete_msg, e.group_id, "撤回", new DeleteMsgContent(id))); TaskUtility.NewTask(async () => await Bot.SendMessage(SupportedAPI.delete_msg, e.group_id, "撤回", new DeleteMsgContent(id), true));
TaskUtility.NewTask(async () => await Post(SupportedAPI.delete_msg, e.group_id, "撤回", new DeleteMsgContent(e.real_id))); TaskUtility.NewTask(async () => await Bot.SendMessage(SupportedAPI.delete_msg, e.group_id, "撤回", new DeleteMsgContent(e.real_id), true));
return; return;
} }
} }
@ -250,10 +82,10 @@ namespace Milimoe.RainBOT.ListeningTask
{ {
TaskUtility.NewTask(async () => TaskUtility.NewTask(async () =>
{ {
if (!await CheckBlackList(e)) return; if (!await Bot.CheckBlackList(true, e.user_id, e.group_id)) return;
GroupMessageContent content = new(e.group_id); GroupMessageContent content = new(e.group_id);
content.message.Add(new ImageMessage("https://iw233.cn/api.php?sort=random")); content.message.Add(new ImageMessage("https://iw233.cn/api.php?sort=random"));
await Post(e, "Image", content); await Bot.SendGroupMessage(e.group_id, "Image", content);
return; return;
}); });
} }
@ -261,10 +93,10 @@ namespace Milimoe.RainBOT.ListeningTask
{ {
TaskUtility.NewTask(async () => TaskUtility.NewTask(async () =>
{ {
if (!await CheckBlackList(e)) return; if (!await Bot.CheckBlackList(true, e.user_id, e.group_id)) return;
GroupMessageContent content = new(e.group_id); GroupMessageContent content = new(e.group_id);
content.message.Add(new ImageMessage("https://iw233.cn/api.php?sort=yin")); content.message.Add(new ImageMessage("https://iw233.cn/api.php?sort=yin"));
await Post(e, "Image", content); await Bot.SendGroupMessage(e.group_id, "Image", content);
return; return;
}); });
} }
@ -272,10 +104,10 @@ namespace Milimoe.RainBOT.ListeningTask
{ {
TaskUtility.NewTask(async () => TaskUtility.NewTask(async () =>
{ {
if (!await CheckBlackList(e)) return; if (!await Bot.CheckBlackList(true, e.user_id, e.group_id)) return;
GroupMessageContent content = new(e.group_id); GroupMessageContent content = new(e.group_id);
content.message.Add(new ImageMessage("https://iw233.cn/api.php?sort=cat")); content.message.Add(new ImageMessage("https://iw233.cn/api.php?sort=cat"));
await Post(e, "Image", content); await Bot.SendGroupMessage(e.group_id, "Image", content);
return; return;
}); });
} }
@ -283,10 +115,10 @@ namespace Milimoe.RainBOT.ListeningTask
{ {
TaskUtility.NewTask(async () => TaskUtility.NewTask(async () =>
{ {
if (!await CheckBlackList(e)) return; if (!await Bot.CheckBlackList(true, e.user_id, e.group_id)) return;
GroupMessageContent content = new(e.group_id); GroupMessageContent content = new(e.group_id);
content.message.Add(new ImageMessage("https://iw233.cn/api.php?sort=pc")); content.message.Add(new ImageMessage("https://iw233.cn/api.php?sort=pc"));
await Post(e, "Image", content); await Bot.SendGroupMessage(e.group_id, "Image", content);
return; return;
}); });
} }
@ -294,10 +126,10 @@ namespace Milimoe.RainBOT.ListeningTask
{ {
TaskUtility.NewTask(async () => TaskUtility.NewTask(async () =>
{ {
if (!await CheckBlackList(e)) return; if (!await Bot.CheckBlackList(true, e.user_id, e.group_id)) return;
GroupMessageContent content = new(e.group_id); GroupMessageContent content = new(e.group_id);
content.message.Add(new ImageMessage("https://api.03c3.cn/api/zb")); content.message.Add(new ImageMessage("https://api.03c3.cn/api/zb"));
await Post(e, "Image", content); await Bot.SendGroupMessage(e.group_id, "Image", content);
return; return;
}); });
} }
@ -305,10 +137,10 @@ namespace Milimoe.RainBOT.ListeningTask
{ {
TaskUtility.NewTask(async () => TaskUtility.NewTask(async () =>
{ {
if (!await CheckBlackList(e)) return; if (!await Bot.CheckBlackList(true, e.user_id, e.group_id)) return;
GroupMessageContent content = new(e.group_id); GroupMessageContent content = new(e.group_id);
content.message.Add(new ImageMessage("file:///" + AppDomain.CurrentDomain.BaseDirectory.ToString() + @"img\long\long (" + (new Random().Next(1540) + 1) + ").jpg")); content.message.Add(new ImageMessage("file:///" + AppDomain.CurrentDomain.BaseDirectory.ToString() + @"img\long\long (" + (new Random().Next(1540) + 1) + ").jpg"));
await Post(e, "Image", content); await Bot.SendGroupMessage(e.group_id, "Image", content);
return; return;
}); });
} }
@ -316,10 +148,10 @@ namespace Milimoe.RainBOT.ListeningTask
{ {
TaskUtility.NewTask(async () => TaskUtility.NewTask(async () =>
{ {
if (!await CheckBlackList(e)) return; if (!await Bot.CheckBlackList(true, e.user_id, e.group_id)) return;
GroupMessageContent content = new(e.group_id); GroupMessageContent content = new(e.group_id);
content.message.Add(new ImageMessage("file:///" + AppDomain.CurrentDomain.BaseDirectory.ToString() + @"img\dingzhen\dz" + (new Random().Next(82) + 1) + ".jpg")); content.message.Add(new ImageMessage("file:///" + AppDomain.CurrentDomain.BaseDirectory.ToString() + @"img\dingzhen\dz" + (new Random().Next(82) + 1) + ".jpg"));
await Post(e, "Image", content); await Bot.SendGroupMessage(e.group_id, "Image", content);
return; return;
}); });
} }
@ -328,7 +160,7 @@ namespace Milimoe.RainBOT.ListeningTask
if (BlackList.Times.TryGetValue(e.user_id, out long bltimes) && bltimes > 5) return; if (BlackList.Times.TryGetValue(e.user_id, out long bltimes) && bltimes > 5) return;
GroupMessageContent content = new(e.group_id); GroupMessageContent content = new(e.group_id);
content.message.Add(new ImageMessage("file:///" + AppDomain.CurrentDomain.BaseDirectory.ToString() + @"img\ee.png")); content.message.Add(new ImageMessage("file:///" + AppDomain.CurrentDomain.BaseDirectory.ToString() + @"img\ee.png"));
_ = Post(e, "Image", content); _ = Bot.SendGroupMessage(e.group_id, "Image", content);
return; return;
} }
@ -337,10 +169,10 @@ namespace Milimoe.RainBOT.ListeningTask
{ {
TaskUtility.NewTask(async () => TaskUtility.NewTask(async () =>
{ {
if (!await CheckBlackList(e)) return; if (!await Bot.CheckBlackList(true, e.user_id, e.group_id)) return;
GroupMessageContent content = new(e.group_id); GroupMessageContent content = new(e.group_id);
content.message.Add(new RecordMessage(Music.MusicList["ikun"])); content.message.Add(new RecordMessage(Music.MusicList["ikun"]));
await Post(e, "Record", content); await Bot.SendGroupMessage(e.group_id, "Record", content);
}); });
return; return;
} }
@ -348,10 +180,10 @@ namespace Milimoe.RainBOT.ListeningTask
{ {
TaskUtility.NewTask(async () => TaskUtility.NewTask(async () =>
{ {
if (!await CheckBlackList(e)) return; if (!await Bot.CheckBlackList(true, e.user_id, e.group_id)) return;
GroupMessageContent content = new(e.group_id); GroupMessageContent content = new(e.group_id);
content.message.Add(new RecordMessage(Music.MusicList["懂CSGO"])); content.message.Add(new RecordMessage(Music.MusicList["懂CSGO"]));
await Post(e, "Record", content); await Bot.SendGroupMessage(e.group_id, "Record", content);
}); });
return; return;
} }
@ -359,20 +191,20 @@ namespace Milimoe.RainBOT.ListeningTask
{ {
TaskUtility.NewTask(async () => TaskUtility.NewTask(async () =>
{ {
if (!await CheckBlackList(e)) return; if (!await Bot.CheckBlackList(true, e.user_id, e.group_id)) return;
GroupMessageContent content = new(e.group_id); GroupMessageContent content = new(e.group_id);
content.message.Add(new RecordMessage(Music.MusicList["令人沮丧的游戏"])); content.message.Add(new RecordMessage(Music.MusicList["令人沮丧的游戏"]));
await Post(e, "Record", content); await Bot.SendGroupMessage(e.group_id, "Record", content);
}); });
} }
if (e.detail.Contains("man", StringComparison.CurrentCultureIgnoreCase)) if (e.detail.Contains("man", StringComparison.CurrentCultureIgnoreCase))
{ {
TaskUtility.NewTask(async () => TaskUtility.NewTask(async () =>
{ {
if (!await CheckBlackList(e)) return; if (!await Bot.CheckBlackList(true, e.user_id, e.group_id)) return;
GroupMessageContent content = new(e.group_id); GroupMessageContent content = new(e.group_id);
content.message.Add(new RecordMessage(Music.MusicList["man"])); content.message.Add(new RecordMessage(Music.MusicList["man"]));
await Post(e, "Record", content); await Bot.SendGroupMessage(e.group_id, "Record", content);
}); });
return; return;
} }
@ -380,10 +212,10 @@ namespace Milimoe.RainBOT.ListeningTask
{ {
TaskUtility.NewTask(async () => TaskUtility.NewTask(async () =>
{ {
if (!await CheckBlackList(e)) return; if (!await Bot.CheckBlackList(true, e.user_id, e.group_id)) return;
GroupMessageContent content = new(e.group_id); GroupMessageContent content = new(e.group_id);
content.message.Add(new RecordMessage(Music.MusicList["马云"])); content.message.Add(new RecordMessage(Music.MusicList["马云"]));
await Post(e, "Record", content); await Bot.SendGroupMessage(e.group_id, "Record", content);
}); });
return; return;
} }
@ -391,10 +223,10 @@ namespace Milimoe.RainBOT.ListeningTask
{ {
TaskUtility.NewTask(async () => TaskUtility.NewTask(async () =>
{ {
if (!await CheckBlackList(e)) return; if (!await Bot.CheckBlackList(true, e.user_id, e.group_id)) return;
GroupMessageContent content = new(e.group_id); GroupMessageContent content = new(e.group_id);
content.message.Add(new RecordMessage(Music.MusicList["电锯"])); content.message.Add(new RecordMessage(Music.MusicList["电锯"]));
await Post(e, "Record", content); await Bot.SendGroupMessage(e.group_id, "Record", content);
}); });
return; return;
} }
@ -402,10 +234,10 @@ namespace Milimoe.RainBOT.ListeningTask
{ {
TaskUtility.NewTask(async () => TaskUtility.NewTask(async () =>
{ {
if (!await CheckBlackList(e)) return; if (!await Bot.CheckBlackList(true, e.user_id, e.group_id)) return;
GroupMessageContent content = new(e.group_id); GroupMessageContent content = new(e.group_id);
content.message.Add(new RecordMessage(Music.MusicList["疤王"])); content.message.Add(new RecordMessage(Music.MusicList["疤王"]));
await Post(e, "Record", content); await Bot.SendGroupMessage(e.group_id, "Record", content);
}); });
return; return;
} }
@ -413,10 +245,21 @@ namespace Milimoe.RainBOT.ListeningTask
{ {
TaskUtility.NewTask(async () => TaskUtility.NewTask(async () =>
{ {
if (!await CheckBlackList(e)) return; if (!await Bot.CheckBlackList(true, e.user_id, e.group_id)) return;
GroupMessageContent content = new(e.group_id); GroupMessageContent content = new(e.group_id);
content.message.Add(new RecordMessage(Music.MusicList["终极"])); content.message.Add(new RecordMessage(Music.MusicList["终极"]));
await Post(e, "Record", content); await Bot.SendGroupMessage(e.group_id, "Record", content);
});
return;
}
if (e.detail.Contains("高考", StringComparison.CurrentCultureIgnoreCase))
{
TaskUtility.NewTask(async () =>
{
if (!await Bot.CheckBlackList(true, e.user_id, e.group_id)) return;
GroupMessageContent content = new(e.group_id);
content.message.Add(new RecordMessage(Music.MusicList["高考"]));
await Bot.SendGroupMessage(e.group_id, "Record", content);
}); });
return; return;
} }
@ -424,10 +267,10 @@ namespace Milimoe.RainBOT.ListeningTask
{ {
TaskUtility.NewTask(async () => TaskUtility.NewTask(async () =>
{ {
if (!await CheckBlackList(e)) return; if (!await Bot.CheckBlackList(true, e.user_id, e.group_id)) return;
GroupMessageContent content = new(e.group_id); GroupMessageContent content = new(e.group_id);
content.message.Add(new RecordMessage(Music.MusicList[Music.MusicList.Keys.ToArray()[new Random().Next(Music.MusicList.Count)]])); content.message.Add(new RecordMessage(Music.MusicList[Music.MusicList.Keys.ToArray()[new Random().Next(Music.MusicList.Count)]]));
await Post(e, "Record", content); await Bot.SendGroupMessage(e.group_id, "Record", content);
}); });
return; return;
} }
@ -437,14 +280,14 @@ namespace Milimoe.RainBOT.ListeningTask
{ {
TaskUtility.NewTask(async () => TaskUtility.NewTask(async () =>
{ {
if (!await CheckBlackList(e)) return; if (!await Bot.CheckBlackList(true, e.user_id, e.group_id)) return;
GroupMessageContent content = new(e.group_id); GroupMessageContent content = new(e.group_id);
content.message.Add(new AtMessage(e.user_id)); content.message.Add(new AtMessage(e.user_id));
if (Daily.UserDailys.TryGetValue(e.user_id, out string? value) && value != null && value.Trim() != "") if (Daily.UserDailys.TryGetValue(e.user_id, out string? value) && value != null && value.Trim() != "")
{ {
content.message.Add(new TextMessage("你已看过你的今日运势:\r\n")); content.message.Add(new TextMessage("你已看过你的今日运势:\r\n"));
content.message.Add(new TextMessage(value)); content.message.Add(new TextMessage(value));
await Post(e, "我的运势", content); await Bot.SendGroupMessage(e.group_id, "我的运势", content);
} }
else else
{ {
@ -452,7 +295,7 @@ namespace Milimoe.RainBOT.ListeningTask
string text = Daily.DailyContent[seq]; string text = Daily.DailyContent[seq];
Daily.UserDailys.Add(e.user_id, text); Daily.UserDailys.Add(e.user_id, text);
content.message.Add(new TextMessage("你的今日运势是:\r\n" + text)); content.message.Add(new TextMessage("你的今日运势是:\r\n" + text));
await Post(e, "我的运势", content); await Bot.SendGroupMessage(e.group_id, "我的运势", content);
// 配图 // 配图
content = new(e.group_id); content = new(e.group_id);
string img = "file:///" + AppDomain.CurrentDomain.BaseDirectory.ToString() + @"img\zi\"; string img = "file:///" + AppDomain.CurrentDomain.BaseDirectory.ToString() + @"img\zi\";
@ -481,7 +324,7 @@ namespace Milimoe.RainBOT.ListeningTask
img += "x" + (new Random().Next(2) + 1) + ".png"; img += "x" + (new Random().Next(2) + 1) + ".png";
} }
content.message.Add(new ImageMessage(img)); content.message.Add(new ImageMessage(img));
await Post(e, "我的运势配图", content); await Bot.SendGroupMessage(e.group_id, "我的运势配图", content);
} }
}); });
return; return;
@ -490,12 +333,12 @@ namespace Milimoe.RainBOT.ListeningTask
{ {
TaskUtility.NewTask(async () => TaskUtility.NewTask(async () =>
{ {
if (!await CheckBlackList(e)) return; if (!await Bot.CheckBlackList(true, e.user_id, e.group_id)) return;
Daily.UserDailys.Remove(e.user_id); Daily.UserDailys.Remove(e.user_id);
GroupMessageContent content = new(e.group_id); GroupMessageContent content = new(e.group_id);
content.message.Add(new AtMessage(e.user_id)); content.message.Add(new AtMessage(e.user_id));
content.message.Add(new TextMessage("你的今日运势已重置。")); content.message.Add(new TextMessage("你的今日运势已重置。"));
await Post(e, "重置运势", content); await Bot.SendGroupMessage(e.group_id, "重置运势", content);
}); });
return; return;
} }
@ -503,7 +346,7 @@ namespace Milimoe.RainBOT.ListeningTask
{ {
TaskUtility.NewTask(async () => TaskUtility.NewTask(async () =>
{ {
if (!await CheckBlackList(e)) return; if (!await Bot.CheckBlackList(true, e.user_id, e.group_id)) return;
string[] strs = e.detail.Replace("查看", "").Replace("运势", "").Trim().Split(' '); string[] strs = e.detail.Replace("查看", "").Replace("运势", "").Trim().Split(' ');
foreach (string str_qq in strs) foreach (string str_qq in strs)
{ {
@ -518,11 +361,11 @@ namespace Milimoe.RainBOT.ListeningTask
{ {
GroupMessageContent content = new(e.group_id); GroupMessageContent content = new(e.group_id);
content.message.Add(new TextMessage(qq + "" + Bot.GetMemberNickName(e.group_id, e.user_id) + ")的今日运势是:\r\n" + daily)); content.message.Add(new TextMessage(qq + "" + Bot.GetMemberNickName(e.group_id, e.user_id) + ")的今日运势是:\r\n" + daily));
await Post(e, "查看运势", content); await Bot.SendGroupMessage(e.group_id, "查看运势", content);
} }
else else
{ {
await Post(e, "查看运势", "TA今天还没有抽取运势哦快去提醒TA"); await Bot.SendGroupMessage(e.group_id, "查看运势", "TA今天还没有抽取运势哦快去提醒TA");
} }
} }
} }
@ -538,21 +381,21 @@ namespace Milimoe.RainBOT.ListeningTask
{ {
TaskUtility.NewTask(async () => TaskUtility.NewTask(async () =>
{ {
if (!await CheckBlackList(e) || !Bot.BotIsAdmin(e.group_id)) return; if (!await Bot.CheckBlackList(true, e.user_id, e.group_id) || !Bot.BotIsAdmin(e.group_id)) return;
if (e.user_id != GeneralSettings.Master) if (e.user_id != GeneralSettings.Master)
{ {
await Post(e, "禁言抽奖", "2秒后开奖\r\n如需要忏悔请在开奖后3秒内发送忏悔开奖前发送无效。"); await Bot.SendGroupMessage(e.group_id, "禁言抽奖", "2秒后开奖\r\n如需要忏悔请在开奖后3秒内发送忏悔开奖前发送无效。");
await Task.Delay(2000); await Task.Delay(2000);
if (!MuteRecall.WillMute.ContainsKey(e.user_id)) MuteRecall.WillMute.Add(e.user_id, e.user_id); if (!MuteRecall.WillMute.ContainsKey(e.user_id)) MuteRecall.WillMute.Add(e.user_id, e.user_id);
long mute_time = GeneralSettings.MuteTime[0] + new Random().NextInt64(GeneralSettings.MuteTime[1] - GeneralSettings.MuteTime[0]); long mute_time = GeneralSettings.MuteTime[0] + new Random().NextInt64(GeneralSettings.MuteTime[1] - GeneralSettings.MuteTime[0]);
await Post(e, "禁言抽奖", "开奖啦!禁言时长:" + (mute_time / 60) + "分钟" + (mute_time % 60) + "秒。\r\n" + "你现在有3秒时间发送忏悔拒绝领奖"); await Bot.SendGroupMessage(e.group_id, "禁言抽奖", "开奖啦!禁言时长:" + (mute_time / 60) + "分钟" + (mute_time % 60) + "秒。\r\n" + "你现在有3秒时间发送忏悔拒绝领奖");
await Task.Delay(3200); await Task.Delay(3200);
await Post(SupportedAPI.set_group_ban, e.group_id, "禁言抽奖", new SetGroupBanContent(e.group_id, e.user_id, mute_time)); await Bot.SendMessage(SupportedAPI.set_group_ban, e.group_id, "禁言抽奖", new SetGroupBanContent(e.group_id, e.user_id, mute_time), true);
MuteRecall.WillMute.Remove(e.user_id); MuteRecall.WillMute.Remove(e.user_id);
} }
else else
{ {
_ = Post(e, "禁言抽奖", "我不能禁言主人!"); _ = Bot.SendGroupMessage(e.group_id, "禁言抽奖", "我不能禁言主人!");
} }
}); });
return; return;
@ -562,11 +405,11 @@ namespace Milimoe.RainBOT.ListeningTask
{ {
TaskUtility.NewTask(async () => TaskUtility.NewTask(async () =>
{ {
if (!await CheckBlackList(e) || !Bot.BotIsAdmin(e.group_id)) return; if (!await Bot.CheckBlackList(true, e.user_id, e.group_id) || !Bot.BotIsAdmin(e.group_id)) return;
await Task.Delay(3800); await Task.Delay(3800);
MuteRecall.WillMute.Remove(e.user_id); MuteRecall.WillMute.Remove(e.user_id);
await Post(SupportedAPI.set_group_ban, e.group_id, "忏悔", new SetGroupBanContent(e.group_id, e.user_id, 0)); await Bot.SendMessage(SupportedAPI.set_group_ban, e.group_id, "忏悔", new SetGroupBanContent(e.group_id, e.user_id, 0), true);
await Post(e, "忏悔", "忏悔成功!!希望你保持纯真,保持野性的美。"); await Bot.SendGroupMessage(e.group_id, "忏悔", "忏悔成功!!希望你保持纯真,保持野性的美。");
}); });
return; return;
} }
@ -576,12 +419,12 @@ namespace Milimoe.RainBOT.ListeningTask
{ {
if (e.user_id != GeneralSettings.Master && e.CheckThrow(40, out dice)) if (e.user_id != GeneralSettings.Master && e.CheckThrow(40, out dice))
{ {
ColorfulCheckPass(sender, "反驳是", dice, 40); Bot.ColorfulCheckPass(sender, "反驳是", dice, 40);
_ = Post(e, "随机反驳是", "是你的头"); _ = Bot.SendGroupMessage(e.group_id, "随机反驳是", "是你的头");
} }
else if (e.user_id == GeneralSettings.Master) else if (e.user_id == GeneralSettings.Master)
{ {
_ = Post(e, "随机反驳是", "是你的头"); _ = Bot.SendGroupMessage(e.group_id, "随机反驳是", "是你的头");
} }
} }
@ -602,7 +445,7 @@ namespace Milimoe.RainBOT.ListeningTask
{ {
if (pos + 1 < e.detail.Length && !SayNo.IgnoreTriggerAfterNo.Any(e.detail[(pos + 1)..].Contains)) if (pos + 1 < e.detail.Length && !SayNo.IgnoreTriggerAfterNo.Any(e.detail[(pos + 1)..].Contains))
{ {
ColorfulCheckPass(sender, "随机反驳不", dice, GeneralSettings.PSayNo); Bot.ColorfulCheckPass(sender, "随机反驳不", dice, GeneralSettings.PSayNo);
content.message.Add(new TextMessage(string.Format(SayNo.SayNoWords[new Random().Next(SayNo.SayNoWords.Count)], e.detail[pos + 1]))); content.message.Add(new TextMessage(string.Format(SayNo.SayNoWords[new Random().Next(SayNo.SayNoWords.Count)], e.detail[pos + 1])));
break; break;
} }
@ -611,7 +454,7 @@ namespace Milimoe.RainBOT.ListeningTask
{ {
if (pos + 1 < e.detail.Length) if (pos + 1 < e.detail.Length)
{ {
ColorfulCheckPass(sender, "随机反驳不", dice, GeneralSettings.PSayNo); Bot.ColorfulCheckPass(sender, "随机反驳不", dice, GeneralSettings.PSayNo);
if (e.detail[pos + 1] == '有') if (e.detail[pos + 1] == '有')
{ {
content.message.Add(new TextMessage(string.Format(SayNo.SayDontHaveWords[new Random().Next(SayNo.SayDontHaveWords.Count - 3)], e.detail[pos + 1]))); content.message.Add(new TextMessage(string.Format(SayNo.SayDontHaveWords[new Random().Next(SayNo.SayDontHaveWords.Count - 3)], e.detail[pos + 1])));
@ -628,7 +471,7 @@ namespace Milimoe.RainBOT.ListeningTask
{ {
if (pos + 1 < e.detail.Length && SayNo.TriggerAfterYes.Any(e.detail[(pos + 1)..].Contains)) if (pos + 1 < e.detail.Length && SayNo.TriggerAfterYes.Any(e.detail[(pos + 1)..].Contains))
{ {
ColorfulCheckPass(sender, "随机反驳不", dice, GeneralSettings.PSayNo); Bot.ColorfulCheckPass(sender, "随机反驳不", dice, GeneralSettings.PSayNo);
content.message.Add(new TextMessage(SayNo.SayNotYesWords[new Random().Next(SayNo.SayNotYesWords.Count)])); content.message.Add(new TextMessage(SayNo.SayNotYesWords[new Random().Next(SayNo.SayNotYesWords.Count)]));
break; break;
} }
@ -637,7 +480,7 @@ namespace Milimoe.RainBOT.ListeningTask
{ {
if (pos + 1 < e.detail.Length && !SayNo.IgnoreTriggerAfterNo.Any(e.detail[(pos + 1)..].Contains) && !SayNo.WillNotSayNo.Any(e.detail[(pos + 1)..].Contains)) if (pos + 1 < e.detail.Length && !SayNo.IgnoreTriggerAfterNo.Any(e.detail[(pos + 1)..].Contains) && !SayNo.WillNotSayNo.Any(e.detail[(pos + 1)..].Contains))
{ {
ColorfulCheckPass(sender, "随机反驳不", dice, GeneralSettings.PSayNo); Bot.ColorfulCheckPass(sender, "随机反驳不", dice, GeneralSettings.PSayNo);
content.message.Add(new TextMessage(string.Format(SayNo.SayDontWords[new Random().Next(SayNo.SayDontWords.Count)], e.detail[pos + 1]))); content.message.Add(new TextMessage(string.Format(SayNo.SayDontWords[new Random().Next(SayNo.SayDontWords.Count)], e.detail[pos + 1])));
break; break;
} }
@ -645,7 +488,7 @@ namespace Milimoe.RainBOT.ListeningTask
} }
if (content.message.Count > 0) if (content.message.Count > 0)
{ {
_ = Post(e, "随机反驳不", content); _ = Bot.SendGroupMessage(e.group_id, "随机反驳不", content);
} }
} }
else if (SayNo.TriggerBeforeNo.Any(e.detail.Contains) && GeneralSettings.IsSayNo && e.CheckThrow(GeneralSettings.PSayNo, out dice)) else if (SayNo.TriggerBeforeNo.Any(e.detail.Contains) && GeneralSettings.IsSayNo && e.CheckThrow(GeneralSettings.PSayNo, out dice))
@ -664,7 +507,7 @@ namespace Milimoe.RainBOT.ListeningTask
{ {
if (pos + keyword.Length + 1 < e.detail.Length) if (pos + keyword.Length + 1 < e.detail.Length)
{ {
ColorfulCheckPass(sender, "随机反驳不", dice, GeneralSettings.PSayNo); Bot.ColorfulCheckPass(sender, "随机反驳不", dice, GeneralSettings.PSayNo);
if (e.detail[(pos + keyword.Length + 1)..].Contains('了')) if (e.detail[(pos + keyword.Length + 1)..].Contains('了'))
{ {
sayword = e.detail[pos..].Replace(keyword, ""); sayword = e.detail[pos..].Replace(keyword, "");
@ -683,7 +526,7 @@ namespace Milimoe.RainBOT.ListeningTask
{ {
if (pos + keyword.Length + 1 < e.detail.Length) if (pos + keyword.Length + 1 < e.detail.Length)
{ {
ColorfulCheckPass(sender, "随机反驳不", dice, GeneralSettings.PSayNo); Bot.ColorfulCheckPass(sender, "随机反驳不", dice, GeneralSettings.PSayNo);
sayword = e.detail[pos..].Replace(keyword, ""); sayword = e.detail[pos..].Replace(keyword, "");
if (sayword.Length > 2) sayword = sayword[..2]; if (sayword.Length > 2) sayword = sayword[..2];
List<string> NewSayWords = []; List<string> NewSayWords = [];
@ -698,43 +541,43 @@ namespace Milimoe.RainBOT.ListeningTask
} }
if (content.message.Count > 0) if (content.message.Count > 0)
{ {
_ = Post(e, "随机反驳不", content); _ = Bot.SendGroupMessage(e.group_id, "随机反驳不", content);
} }
} }
else if (e.detail.Contains("可以") && !e.detail.Contains('不') && e.CheckThrow(GeneralSettings.PSayNo, out dice)) else if (e.detail.Contains("可以") && !e.detail.Contains('不') && e.CheckThrow(GeneralSettings.PSayNo, out dice))
{ {
ColorfulCheckPass(sender, "随机反驳不", dice, GeneralSettings.PSayNo); Bot.ColorfulCheckPass(sender, "随机反驳不", dice, GeneralSettings.PSayNo);
if (dice < (GeneralSettings.PSayNo / 2)) if (dice < (GeneralSettings.PSayNo / 2))
{ {
_ = Post(e, "随机反驳不", "可以"); _ = Bot.SendGroupMessage(e.group_id, "随机反驳不", "可以");
} }
else else
{ {
_ = Post(e, "随机反驳不", "不可以"); _ = Bot.SendGroupMessage(e.group_id, "随机反驳不", "不可以");
} }
} }
else if (e.detail.Contains('能') && !e.detail.Contains('不') && !e.detail.Contains('技') && !e.detail.Contains('可') && e.CheckThrow(GeneralSettings.PSayNo, out dice)) else if (e.detail.Contains('能') && !e.detail.Contains('不') && !e.detail.Contains('技') && !e.detail.Contains('可') && e.CheckThrow(GeneralSettings.PSayNo, out dice))
{ {
ColorfulCheckPass(sender, "随机反驳不", dice, GeneralSettings.PSayNo); Bot.ColorfulCheckPass(sender, "随机反驳不", dice, GeneralSettings.PSayNo);
if (dice < (GeneralSettings.PSayNo / 2)) if (dice < (GeneralSettings.PSayNo / 2))
{ {
_ = Post(e, "随机反驳不", "能"); _ = Bot.SendGroupMessage(e.group_id, "随机反驳不", "能");
} }
else else
{ {
_ = Post(e, "随机反驳不", "不能"); _ = Bot.SendGroupMessage(e.group_id, "随机反驳不", "不能");
} }
} }
else if (e.detail.Contains("可能") && !e.detail.Contains('不') && e.CheckThrow(GeneralSettings.PSayNo, out dice)) else if (e.detail.Contains("可能") && !e.detail.Contains('不') && e.CheckThrow(GeneralSettings.PSayNo, out dice))
{ {
ColorfulCheckPass(sender, "随机反驳不", dice, GeneralSettings.PSayNo); Bot.ColorfulCheckPass(sender, "随机反驳不", dice, GeneralSettings.PSayNo);
if (dice < (GeneralSettings.PSayNo / 2)) if (dice < (GeneralSettings.PSayNo / 2))
{ {
_ = Post(e, "随机反驳不", "可能"); _ = Bot.SendGroupMessage(e.group_id, "随机反驳不", "可能");
} }
else else
{ {
_ = Post(e, "随机反驳不", "不可能"); _ = Bot.SendGroupMessage(e.group_id, "随机反驳不", "不可能");
} }
} }
@ -744,13 +587,13 @@ namespace Milimoe.RainBOT.ListeningTask
{ {
if (GeneralSettings.IsReverseAt && e.CheckThrow(GeneralSettings.PReverseAt, out dice)) if (GeneralSettings.IsReverseAt && e.CheckThrow(GeneralSettings.PReverseAt, out dice))
{ {
ColorfulCheckPass(sender, "反向艾特", dice, GeneralSettings.PReverseAt); Bot.ColorfulCheckPass(sender, "反向艾特", dice, GeneralSettings.PReverseAt);
foreach (AtMessage at in temp_at) foreach (AtMessage at in temp_at)
{ {
at.data.qq = e.user_id.ToString(); at.data.qq = e.user_id.ToString();
GroupMessageContent content = new(e.group_id); GroupMessageContent content = new(e.group_id);
content.message.AddRange(e.message); content.message.AddRange(e.message);
_ = Post(e, "反向艾特", content); _ = Bot.SendGroupMessage(e.group_id, "反向艾特", content);
} }
} }
return; return;
@ -759,7 +602,7 @@ namespace Milimoe.RainBOT.ListeningTask
// 随机OSM // 随机OSM
if (GeneralSettings.IsOSM && !Ignore.RepeatIgnore.Contains(e.detail) && e.CheckThrow(GeneralSettings.POSM, out dice)) if (GeneralSettings.IsOSM && !Ignore.RepeatIgnore.Contains(e.detail) && e.CheckThrow(GeneralSettings.POSM, out dice))
{ {
ColorfulCheckPass(sender, "随机OSM", dice, GeneralSettings.POSM); Bot.ColorfulCheckPass(sender, "随机OSM", dice, GeneralSettings.POSM);
GroupMessageContent content = new(e.group_id); GroupMessageContent content = new(e.group_id);
string img = new Random().Next(3) switch string img = new Random().Next(3) switch
{ {
@ -768,7 +611,7 @@ namespace Milimoe.RainBOT.ListeningTask
_ => "file:///" + AppDomain.CurrentDomain.BaseDirectory.ToString() + @"img\osm.jpg", _ => "file:///" + AppDomain.CurrentDomain.BaseDirectory.ToString() + @"img\osm.jpg",
}; };
content.message.Add(new ImageMessage(img)); content.message.Add(new ImageMessage(img));
_ = Post(e, "Image", content); _ = Bot.SendGroupMessage(e.group_id, "Image", content);
return; return;
} }
@ -776,10 +619,10 @@ namespace Milimoe.RainBOT.ListeningTask
if (GeneralSettings.IsRepeat && !Ignore.RepeatIgnore.Contains(e.detail) && e.CheckThrow(GeneralSettings.PRepeat, out dice)) if (GeneralSettings.IsRepeat && !Ignore.RepeatIgnore.Contains(e.detail) && e.CheckThrow(GeneralSettings.PRepeat, out dice))
{ {
int delay = GeneralSettings.RepeatDelay[0] + new Random().Next(GeneralSettings.RepeatDelay[1] - GeneralSettings.RepeatDelay[0]); int delay = GeneralSettings.RepeatDelay[0] + new Random().Next(GeneralSettings.RepeatDelay[1] - GeneralSettings.RepeatDelay[0]);
ColorfulCheckPass(sender, "随机复读", dice, GeneralSettings.PRepeat, delay); Bot.ColorfulCheckPass(sender, "随机复读", dice, GeneralSettings.PRepeat, delay);
GroupMessageContent content = new(e.group_id); GroupMessageContent content = new(e.group_id);
content.message.AddRange(e.message); content.message.AddRange(e.message);
_ = Post(e, "随机复读", content, delay * 1000); _ = Bot.SendGroupMessage(e.group_id, "随机复读", content, delay * 1000);
return; return;
} }
@ -787,13 +630,13 @@ namespace Milimoe.RainBOT.ListeningTask
if (GeneralSettings.IsCallBrother && e.CheckThrow(GeneralSettings.PCallBrother, out dice)) if (GeneralSettings.IsCallBrother && e.CheckThrow(GeneralSettings.PCallBrother, out dice))
{ {
int delay = GeneralSettings.RepeatDelay[0] + new Random().Next(GeneralSettings.RepeatDelay[1]); int delay = GeneralSettings.RepeatDelay[0] + new Random().Next(GeneralSettings.RepeatDelay[1]);
ColorfulCheckPass(sender, "随机叫哥", dice, GeneralSettings.PCallBrother, delay); Bot.ColorfulCheckPass(sender, "随机叫哥", dice, GeneralSettings.PCallBrother, delay);
string name = (sender.card != "" ? sender.card : sender.nickname).Trim(); string name = (sender.card != "" ? sender.card : sender.nickname).Trim();
int pos = new Random().Next(name.Length - 1); int pos = new Random().Next(name.Length - 1);
GroupMessageContent content = new(e.group_id); GroupMessageContent content = new(e.group_id);
content.message.Add(new AtMessage(e.user_id)); content.message.Add(new AtMessage(e.user_id));
content.message.Add(new TextMessage(string.Concat(name.AsSpan(pos, 2), "哥"))); content.message.Add(new TextMessage(string.Concat(name.AsSpan(pos, 2), "哥")));
_ = Post(e, "随机叫哥", content, delay * 1000); _ = Bot.SendGroupMessage(e.group_id, "随机叫哥", content, delay * 1000);
return; return;
} }
} }
@ -804,217 +647,5 @@ namespace Milimoe.RainBOT.ListeningTask
Console.ForegroundColor = ConsoleColor.Gray; Console.ForegroundColor = ConsoleColor.Gray;
} }
} }
public static async Task<bool> CheckBlackList(GroupMessageEvent e)
{
// 黑名单
if (e.user_id == GeneralSettings.Master) return true;
if (!BlackList.Times.ContainsKey(e.user_id))
{
BlackList.Times.Add(e.user_id, 1);
return true;
}
else if (BlackList.Times.TryGetValue(e.user_id, out long bltimes) && bltimes > 5)
{
return false;
}
else if (++bltimes == 5)
{
BlackList.Times[e.user_id] = 6;
GroupMessageContent content = new(e.group_id);
content.message.Add(new AtMessage(e.user_id));
content.message.Add(new TextMessage("警告你已因短时间内频繁操作被禁止使用BOT指令" + (GeneralSettings.BlackFrozenTime / 60) + "分钟" + (GeneralSettings.BlackFrozenTime % 60) + "秒。"));
_ = Task.Run(async () =>
{
await Task.Delay(1000 * GeneralSettings.BlackFrozenTime);
BlackList.Times.Remove(e.user_id);
});
await Post(e, "黑名单", content);
return false;
}
else
{
BlackList.Times[e.user_id] = bltimes;
return true;
}
}
public static async Task Mute(GroupMessageEvent e)
{
if (!Bot.BotIsAdmin(e.group_id)) return;
bool unmute = e.detail.Contains("解禁");
string[] strs = Regex.Split(e.detail, @"\s+");
if (!unmute && strs.Length < 2) return;
if (e.user_id == GeneralSettings.Master || (unmute && GeneralSettings.UnMuteAccessGroup.Contains(e.user_id)) || (!unmute && GeneralSettings.MuteAccessGroup.Contains(e.user_id)))
{
strs = Regex.Split(e.detail.Replace(".osm mute", "").Replace("禁言", "").Replace("解禁", "").Replace("所有人", "").Trim(), @"\s+");
long time = 0;
if ((!unmute && strs.Length > 1 && long.TryParse(strs[^1], out time) && time >= 0 && time < 2592000) || unmute)
{
List<long> qqlist = [];
List<IContent> list = [];
foreach (string str in unmute ? strs : strs[..^1])
{
if (long.TryParse(str.Replace(@"@", "").Trim(), out long qq))
{
SetGroupBanContent content = new(e.group_id, qq, time);
list.Add(content);
qqlist.Add(qq);
}
}
await Post(SupportedAPI.set_group_ban, e.group_id, "禁言指令", list);
if (time > 0)
{
await Task.Delay(3000);
foreach (long qq in qqlist)
{
if (MuteRecall.Muted[e.group_id].ContainsKey(qq)) MuteRecall.Muted[e.group_id][qq] = GeneralSettings.Master;
else MuteRecall.Muted[e.group_id].Add(qq, GeneralSettings.Master);
}
}
return;
}
await Post(e, "OSM指令", MasterCommand.Execute(".osm mute", "", strs.Length > 1 ? strs[1..] : []));
}
else await Post(e, "OSM指令", "你没有权限使用此指令。");
}
public static async Task Mute(GroupMessageEvent e, IEnumerable<long> qqlist)
{
if (!Bot.BotIsAdmin(e.group_id)) return;
bool unmute = e.detail.Contains("解禁");
if (e.user_id == GeneralSettings.Master || (unmute && GeneralSettings.UnMuteAccessGroup.Contains(e.user_id)) || (!unmute && GeneralSettings.MuteAccessGroup.Contains(e.user_id)))
{
string[] strs = Regex.Split(e.detail.Replace("禁言", "").Replace("解禁", "").Replace("所有人", "").Trim(), @"\s+");
long mute_time = unmute ? 0 : GeneralSettings.MuteTime[0] + new Random().NextInt64(GeneralSettings.MuteTime[1] - GeneralSettings.MuteTime[0]);
if (long.TryParse(strs[^1], out long time) && time >= 0 && time < 2592000)
{
mute_time = time;
}
List<IContent> list = [];
foreach (long qq in qqlist)
{
SetGroupBanContent content = new(e.group_id, qq, mute_time);
list.Add(content);
}
await Post(SupportedAPI.set_group_ban, e.group_id, "批量禁言指令", list);
if (mute_time > 0)
{
await Task.Delay(3000);
foreach (long qq in qqlist)
{
if (MuteRecall.Muted[e.group_id].ContainsKey(qq)) MuteRecall.Muted[e.group_id][qq] = GeneralSettings.Master;
else MuteRecall.Muted[e.group_id].Add(qq, GeneralSettings.Master);
}
}
}
else await Post(e, "OSM指令", "你没有权限使用此指令。");
}
public static async Task MuteGroup(GroupMessageEvent e)
{
if (!Bot.BotIsAdmin(e.group_id)) return;
if (e.user_id == GeneralSettings.Master || GeneralSettings.MuteAccessGroup.Contains(e.user_id))
{
string str = e.detail.Replace(".osm mutegroup", "").Replace("跨群禁言", "").Trim();
string[] strs = Regex.Split(str, @"\s+");
if (strs.Length > 2)
{
string str_group = strs[0].Replace(@"@", "").Trim();
string str_qq = strs[1].Replace(@"@", "").Trim();
if (long.TryParse(str_group, out long group) && long.TryParse(str_qq, out long qq) && long.TryParse(strs[2], out long time) && time >= 0 && time < 2592000)
{
SetGroupBanContent content = new(group, qq, time);
await Post(SupportedAPI.set_group_ban, group, "OSM指令", content);
if (time > 0)
{
await Task.Delay(3000);
if (MuteRecall.Muted[e.group_id].ContainsKey(qq)) MuteRecall.Muted[e.group_id][qq] = GeneralSettings.Master;
else MuteRecall.Muted[e.group_id].Add(qq, GeneralSettings.Master);
}
}
else await Post(e, "OSM指令", MasterCommand.Execute(".osm mute", "", strs.Length > 1 ? strs[1..] : []));
}
else await Post(e, "OSM指令", MasterCommand.Execute(".osm mute", "", strs.Length > 1 ? strs[1..] : []));
}
else await Post(e, "OSM指令", "你没有权限使用此指令。");
}
public static void ColorfulCheckPass(Sender sender, string function, long dice, long probability, int delay = 0)
{
Console.ForegroundColor = ConsoleColor.Green;
if (delay > 0)
{
Console.Write($"{DateTime.Now:yyyy/MM/dd HH:mm:ss} ");
}
Console.Write($"{sender.user_id}{(sender.card != "" ? sender.card : sender.nickname)})的{function}检定通过:{dice} < {probability}");
if (delay > 0)
{
Console.Write(" -> " + delay + "秒后执行");
}
Console.WriteLine();
Console.ForegroundColor = ConsoleColor.Gray;
}
public static async Task Post(GroupMessageEvent e, string function, string text, int delay = 0)
{
string result = (await e.SendMessage(text, delay)).ReasonPhrase ?? "";
Console.Write($"{DateTime.Now:yyyy/MM/dd HH:mm:ss} F/");
Console.ForegroundColor = ConsoleColor.Yellow;
Console.Write(function);
Console.ForegroundColor = ConsoleColor.Gray;
Console.WriteLine($" G/{e.group_id} <- {text} {result}");
}
public static async Task Post(GroupMessageEvent e, string function, GroupMessageContent content, int delay = 0)
{
string result = (await e.SendMessage(content, delay)).ReasonPhrase ?? "";
Console.Write($"{DateTime.Now:yyyy/MM/dd HH:mm:ss} F/");
Console.ForegroundColor = ConsoleColor.Yellow;
Console.Write(function);
Console.ForegroundColor = ConsoleColor.Gray;
if (!GeneralSettings.IsDebug)
{
Console.WriteLine($" G/{e.group_id} <- {content.detail} {result}");
}
else
{
Console.WriteLine($" G/{e.group_id} <- {JsonTools.GetString(content)} {result}");
}
}
public static async Task Post(string api, long group_id, string function, IContent content)
{
string result = (await HTTPPost.Post(api, content)).ReasonPhrase ?? "";
Console.Write($"{DateTime.Now:yyyy/MM/dd HH:mm:ss} F/");
Console.ForegroundColor = ConsoleColor.Yellow;
Console.Write(function);
Console.ForegroundColor = ConsoleColor.Gray;
if (!GeneralSettings.IsDebug)
{
Console.WriteLine($" G/{group_id} <- {content.detail} {result}");
}
else
{
Console.WriteLine($" G/{group_id} <- {HTTPHelper.GetJsonString(api, content)} {result}");
}
}
public static async Task Post(string api, long group_id, string function, IEnumerable<IContent> contents)
{
await HTTPPost.Post(api, contents);
Console.Write($"{DateTime.Now:yyyy/MM/dd HH:mm:ss} F/");
Console.ForegroundColor = ConsoleColor.Yellow;
Console.Write(function);
Console.ForegroundColor = ConsoleColor.Gray;
if (!GeneralSettings.IsDebug)
{
Console.WriteLine($" G/{group_id} <- 已在后台执行");
}
else
{
Console.WriteLine($" G/{group_id} <- 已在后台执行");
}
}
} }
} }

View File

@ -173,8 +173,14 @@ try
} }
}); });
bool isListening = true;
CancellationTokenSource cts = new();
CancellationToken ct = cts.Token;
Task t = Task.Factory.StartNew(() =>
{
// 循环接收消息,此线程会在没有请求时阻塞 // 循环接收消息,此线程会在没有请求时阻塞
while (true) while (isListening)
{ {
try try
{ {
@ -187,6 +193,23 @@ try
Console.ForegroundColor = ConsoleColor.Gray; Console.ForegroundColor = ConsoleColor.Gray;
} }
} }
}, ct);
while (true)
{
string order = Console.ReadLine()?.ToLower().Trim() ?? "";
switch (order)
{
case "debug on":
GeneralSettings.IsDebug = true;
Console.WriteLine("开启Debug模式");
break;
case "debug off":
GeneralSettings.IsDebug = false;
Console.WriteLine("关闭Debug模式");
break;
}
}
} }
catch (Exception e) catch (Exception e)
{ {

View File

@ -1,9 +1,14 @@
using System.Reflection; using System.Text.Json;
using System.Text.Json; using System.Text.RegularExpressions;
using Milimoe.OneBot.Framework; using Milimoe.OneBot.Framework;
using Milimoe.OneBot.Framework.Interface;
using Milimoe.OneBot.Framework.Utility; using Milimoe.OneBot.Framework.Utility;
using Milimoe.OneBot.Model.Content; using Milimoe.OneBot.Model.Content;
using Milimoe.OneBot.Model.Message;
using Milimoe.OneBot.Model.Other; using Milimoe.OneBot.Model.Other;
using Milimoe.OneBot.Utility;
using Milimoe.RainBOT.Command;
using Group = Milimoe.OneBot.Model.Other.Group;
namespace Milimoe.RainBOT.Settings namespace Milimoe.RainBOT.Settings
{ {
@ -81,5 +86,227 @@ namespace Milimoe.RainBOT.Settings
{ {
return member.card != "" ? member.card : member.nickname; return member.card != "" ? member.card : member.nickname;
} }
public static async Task<bool> CheckBlackList(bool send_group, long user_id, long target_id)
{
// 黑名单
if (user_id == GeneralSettings.Master) return true;
if (!BlackList.Times.ContainsKey(user_id))
{
BlackList.Times.Add(user_id, 1);
return true;
}
else if (BlackList.Times.TryGetValue(user_id, out long bltimes) && bltimes > 5)
{
return false;
}
else if (++bltimes == 5)
{
BlackList.Times[user_id] = 6;
FriendMessageContent content = new(user_id);
content.message.Add(new AtMessage(user_id));
content.message.Add(new TextMessage("警告你已因短时间内频繁操作被禁止使用BOT指令" + (GeneralSettings.BlackFrozenTime / 60) + "分钟" + (GeneralSettings.BlackFrozenTime % 60) + "秒。"));
_ = Task.Run(async () =>
{
await Task.Delay(1000 * GeneralSettings.BlackFrozenTime);
BlackList.Times.Remove(user_id);
});
await (send_group ? SendFriendMessage(target_id, "黑名单", content) : SendFriendMessage(target_id, "黑名单", content));
return false;
}
else
{
BlackList.Times[user_id] = bltimes;
return true;
}
}
public static void ColorfulCheckPass(Sender sender, string function, long dice, long probability, int delay = 0)
{
Console.ForegroundColor = ConsoleColor.Green;
if (delay > 0)
{
Console.Write($"{DateTime.Now:yyyy/MM/dd HH:mm:ss} ");
}
Console.Write($"{sender.user_id}{(sender.card != "" ? sender.card : sender.nickname)})的{function}检定通过:{dice} < {probability}");
if (delay > 0)
{
Console.Write(" -> " + delay + "秒后执行");
}
Console.WriteLine();
Console.ForegroundColor = ConsoleColor.Gray;
}
public static async Task SendGroupMessage(long group_id, string function, string text, int delay = 0)
{
GroupMessageContent content = new(group_id);
content.message.Add(new TextMessage(text));
if (delay > 0)
{
await Task.Delay(delay);
}
await SendMessage(SupportedAPI.send_group_msg, group_id, function, content, true);
}
public static async Task SendGroupMessage(long group_id, string function, IContent content) => await SendMessage(SupportedAPI.send_group_msg, group_id, function, content, true);
public static async Task SendGroupMessage(long group_id, string function, IContent content, int delay = 0)
{
if (delay > 0)
{
await Task.Delay(delay);
}
await SendMessage(SupportedAPI.send_group_msg, group_id, function, content, true);
}
public static async Task SendGroupMessage(long group_id, string function, IEnumerable<IContent> contents) => await SendMessage(SupportedAPI.send_group_msg, group_id, function, contents, true);
public static async Task SendFriendMessage(long user_id, string function, string text)
{
FriendMessageContent content = new(user_id);
content.message.Add(new TextMessage(text));
await SendMessage(SupportedAPI.send_private_msg, user_id, function, content, false);
}
public static async Task SendFriendMessage(long user_id, string function, IContent content) => await SendMessage(SupportedAPI.send_private_msg, user_id, function, content, false);
public static async Task SendFriendMessage(long user_id, string function, IEnumerable<IContent> contents) => await SendMessage(SupportedAPI.send_private_msg, user_id, function, contents, false);
public static async Task SendMessage(string api, long target_id, string function, IContent content, bool send_group)
{
string msg_type = send_group ? "G" : "P";
string result = (await HTTPPost.Post(api, content)).ReasonPhrase ?? "";
Console.Write($"{DateTime.Now:yyyy/MM/dd HH:mm:ss} F/");
Console.ForegroundColor = ConsoleColor.Yellow;
Console.Write(function);
Console.ForegroundColor = ConsoleColor.Gray;
if (!GeneralSettings.IsDebug)
{
Console.WriteLine($" {msg_type}/{target_id} <- {content.detail} {result}");
}
else
{
Console.WriteLine($" {msg_type}/{target_id} <- {HTTPHelper.GetJsonString(api, content)} {result}");
}
}
public static async Task SendMessage(string api, long target_id, string function, IEnumerable<IContent> contents, bool send_group)
{
string msg_type = send_group ? "G" : "P";
await HTTPPost.Post(api, contents);
Console.Write($"{DateTime.Now:yyyy/MM/dd HH:mm:ss} F/");
Console.ForegroundColor = ConsoleColor.Yellow;
Console.Write(function);
Console.ForegroundColor = ConsoleColor.Gray;
if (!GeneralSettings.IsDebug)
{
Console.WriteLine($" {msg_type}/{target_id} <- 已在后台执行");
}
else
{
Console.WriteLine($" {msg_type}/{target_id} <- 已在后台执行");
}
}
public static async Task Mute(long user_id, long group_id, string detail)
{
if (!BotIsAdmin(group_id)) return;
bool unmute = detail.Contains("解禁");
string[] strs = Regex.Split(detail, @"\s+");
if (!unmute && strs.Length < 2) return;
if (user_id == GeneralSettings.Master || (unmute && GeneralSettings.UnMuteAccessGroup.Contains(user_id)) || (!unmute && GeneralSettings.MuteAccessGroup.Contains(user_id)))
{
strs = Regex.Split(detail.Replace(".osm mute", "").Replace("禁言", "").Replace("解禁", "").Replace("所有人", "").Trim(), @"\s+");
long time = 0;
if ((!unmute && strs.Length > 1 && long.TryParse(strs[^1], out time) && time >= 0 && time < 2592000) || unmute)
{
List<long> qqlist = [];
List<IContent> list = [];
foreach (string str in unmute ? strs : strs[..^1])
{
if (long.TryParse(str.Replace(@"@", "").Trim(), out long qq))
{
SetGroupBanContent content = new(group_id, qq, time);
list.Add(content);
qqlist.Add(qq);
}
}
await SendMessage(SupportedAPI.set_group_ban, group_id, "禁言指令", list, true);
if (time > 0)
{
await Task.Delay(3000);
foreach (long qq in qqlist)
{
if (MuteRecall.Muted[group_id].ContainsKey(qq)) MuteRecall.Muted[group_id][qq] = GeneralSettings.Master;
else MuteRecall.Muted[group_id].Add(qq, GeneralSettings.Master);
}
}
return;
}
await SendGroupMessage(group_id, "OSM指令", MasterCommand.Execute_Worker(".osm mute", "", strs.Length > 1 ? strs[1..] : []));
}
else await SendGroupMessage(group_id, "OSM指令", "你没有权限使用此指令。");
}
public static async Task Mute(long user_id, long group_id, string detail, IEnumerable<long> qqlist)
{
if (!BotIsAdmin(group_id)) return;
bool unmute = detail.Contains("解禁");
if (user_id == GeneralSettings.Master || (unmute && GeneralSettings.UnMuteAccessGroup.Contains(user_id)) || (!unmute && GeneralSettings.MuteAccessGroup.Contains(user_id)))
{
string[] strs = Regex.Split(detail.Replace("禁言", "").Replace("解禁", "").Replace("所有人", "").Trim(), @"\s+");
long mute_time = unmute ? 0 : GeneralSettings.MuteTime[0] + new Random().NextInt64(GeneralSettings.MuteTime[1] - GeneralSettings.MuteTime[0]);
if (long.TryParse(strs[^1], out long time) && time >= 0 && time < 2592000)
{
mute_time = time;
}
List<IContent> list = [];
foreach (long qq in qqlist)
{
SetGroupBanContent content = new(group_id, qq, mute_time);
list.Add(content);
}
await SendMessage(SupportedAPI.set_group_ban, group_id, "批量禁言指令", list, true);
if (mute_time > 0)
{
await Task.Delay(3000);
foreach (long qq in qqlist)
{
if (MuteRecall.Muted[group_id].ContainsKey(qq)) MuteRecall.Muted[group_id][qq] = GeneralSettings.Master;
else MuteRecall.Muted[group_id].Add(qq, GeneralSettings.Master);
}
}
}
else await SendGroupMessage(group_id, "OSM指令", "你没有权限使用此指令。");
}
public static async Task MuteGroup(long user_id, long group_id, string detail)
{
if (!BotIsAdmin(group_id)) return;
if (user_id == GeneralSettings.Master || GeneralSettings.MuteAccessGroup.Contains(user_id))
{
string str = detail.Replace(".osm mutegroup", "").Replace("跨群禁言", "").Trim();
string[] strs = Regex.Split(str, @"\s+");
if (strs.Length > 2)
{
string str_group = strs[0].Replace(@"@", "").Trim();
string str_qq = strs[1].Replace(@"@", "").Trim();
if (long.TryParse(str_group, out long group) && long.TryParse(str_qq, out long qq) && long.TryParse(strs[2], out long time) && time >= 0 && time < 2592000)
{
SetGroupBanContent content = new(group, qq, time);
await SendMessage(SupportedAPI.set_group_ban, group, "OSM指令", content, true);
if (time > 0)
{
await Task.Delay(3000);
if (MuteRecall.Muted[group_id].ContainsKey(qq)) MuteRecall.Muted[group_id][qq] = GeneralSettings.Master;
else MuteRecall.Muted[group_id].Add(qq, GeneralSettings.Master);
}
}
else await SendGroupMessage(group, "OSM指令", MasterCommand.Execute_Worker(".osm mute", "", strs.Length > 1 ? strs[1..] : []));
}
else await SendGroupMessage(group_id, "OSM指令", MasterCommand.Execute_Worker(".osm mute", "", strs.Length > 1 ? strs[1..] : []));
}
else await SendGroupMessage(group_id, "OSM指令", "你没有权限使用此指令。");
}
} }
} }

View File

@ -10,8 +10,9 @@
/// man<para/> /// man<para/>
/// 马云<para/> /// 马云<para/>
/// 疤王<para/> /// 疤王<para/>
/// 电锯/追命<para/> /// 电锯<para/>
/// 终极<para/> /// 终极<para/>
/// 高考<para/>
/// </summary> /// </summary>
public static Dictionary<string, string> MusicList { get; set; } = []; public static Dictionary<string, string> MusicList { get; set; } = [];
@ -25,6 +26,7 @@
MusicList.Add("疤王", "file:///" + AppDomain.CurrentDomain.BaseDirectory.ToString() + @"music\疤王.mp3"); MusicList.Add("疤王", "file:///" + AppDomain.CurrentDomain.BaseDirectory.ToString() + @"music\疤王.mp3");
MusicList.Add("电锯", "file:///" + AppDomain.CurrentDomain.BaseDirectory.ToString() + @"music\电锯.mp3"); MusicList.Add("电锯", "file:///" + AppDomain.CurrentDomain.BaseDirectory.ToString() + @"music\电锯.mp3");
MusicList.Add("终极", "file:///" + AppDomain.CurrentDomain.BaseDirectory.ToString() + @"music\终极.mp3"); MusicList.Add("终极", "file:///" + AppDomain.CurrentDomain.BaseDirectory.ToString() + @"music\终极.mp3");
MusicList.Add("高考", "file:///" + AppDomain.CurrentDomain.BaseDirectory.ToString() + @"music\高考.mp3");
} }
} }
} }

View File

@ -3,8 +3,8 @@
public class OSMCore public class OSMCore
{ {
public const string version = "v1.0"; public const string version = "v1.0";
public const string version2 = "Release"; public const string version2 = "Patch1";
public const string time = "Mar. 21st, 2024"; public const string time = "Mar. 22nd, 2024";
public static string Info => $"OSM Core {version} {version2}\r\nAuthor: Milimoe\r\nBuilt on {time}\r\nSee: https://github.com/milimoe"; public static string Info => $"OSM Core {version} {version2}\r\nAuthor: Milimoe\r\nBuilt on {time}\r\nSee: https://github.com/milimoe";
} }