RainBOT/src/Main.cs
2024-12-30 23:55:51 +08:00

260 lines
8.1 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

using Milimoe.OneBot.Framework;
using Milimoe.OneBot.Model.Content;
using Milimoe.OneBot.Model.Message;
using Milimoe.OneBot.Model.Other;
using Milimoe.RainBOT.Command;
using Milimoe.RainBOT.ListeningTask;
using Milimoe.RainBOT.Settings;
try
{
// Debug模式启动项
if (args.Contains("--debug"))
{
GeneralSettings.IsDebug = true;
Console.ForegroundColor = ConsoleColor.Cyan;
Console.WriteLine("Debug模式");
Console.ForegroundColor = ConsoleColor.Gray;
}
if (args.Any(a => a.StartsWith("-g")))
{
string debug_group = args.Where(a => a.StartsWith("-g")).FirstOrDefault() ?? "";
debug_group = debug_group.Replace("-g", "").Trim();
if (long.TryParse(debug_group, out long group_id))
{
GeneralSettings.DebugGroupID = group_id;
Console.ForegroundColor = ConsoleColor.Cyan;
Console.WriteLine("已指定Debug调试沙盒群聊" + GeneralSettings.DebugGroupID);
Console.ForegroundColor = ConsoleColor.Gray;
}
}
HTTPListener? listener = default;
// 首先需要创建一个HTTP监听器
while (true)
{
try
{
listener = new();
if (listener.available)
{
break;
}
}
catch (Exception e_create_listener)
{
Console.WriteLine(e_create_listener);
Console.Write("你想继续吗?[y/n]");
ConsoleKeyInfo c = Console.ReadKey();
if (c.Key == ConsoleKey.N)
{
Console.ForegroundColor = ConsoleColor.Red;
Console.WriteLine(" Stop");
Console.ForegroundColor = ConsoleColor.Gray;
break;
}
else
{
Console.WriteLine();
}
}
}
if (listener is null || !listener.available)
{
return;
}
Console.WriteLine("初始化参数设定...");
GeneralSettings.LoadSetting();
if (GeneralSettings.BotQQ == -1)
{
Console.Write("请设定BotQQ否则某些功能无法正常运行");
if (long.TryParse(Console.ReadLine(), out long bot_qq))
{
GeneralSettings.BotQQ = bot_qq;
}
}
if (GeneralSettings.Master == -1)
{
Console.Write("请设定MasterQQ否则某些功能无法正常运行");
if (long.TryParse(Console.ReadLine(), out long master_qq))
{
GeneralSettings.Master = master_qq;
}
}
Console.WriteLine("保存参数设定...");
GeneralSettings.SaveConfig();
try
{
Console.WriteLine("初始化机器人QQ群列表...");
await Bot.GetGroups();
Console.WriteLine("初始化机器人QQ群成员列表...");
await Bot.GetGroupMembers();
}
catch (Exception e)
{
Console.ForegroundColor = ConsoleColor.Red;
Console.WriteLine(e);
Console.ForegroundColor = ConsoleColor.Gray;
}
Console.WriteLine("初始化音频/运势/词汇列表...");
Music.InitMusicList();
Daily.InitDaily();
SayNo.InitSayNo();
Ignore.InitIgnore();
Console.ForegroundColor = ConsoleColor.Green;
Console.WriteLine("初始化完毕!");
Console.ForegroundColor = ConsoleColor.Gray;
Console.WriteLine("开始监听 -> " + listener.address);
// 绑定监听事件
listener.GroupMessageListening += GroupMessageTask.ListeningTask_handler;
listener.GroupBanNoticeListening += GroupBanTask.ListeningTask_handler;
listener.FriendMessageListening += FriendMessageTask.ListeningTask_handler;
_ = Task.Factory.StartNew(async () =>
{
while (true)
{
try
{
DateTime now = DateTime.Now;
if (now.Hour == 8 && now.Minute == 30 && !Daily.DailyNews)
{
Daily.DailyNews = true;
// 发送每日新闻
foreach (Group g in Bot.Groups)
{
GroupMessageContent content = new(g.group_id);
content.message.Add(new ImageMessage("https://api.03c3.cn/api/zb"));
await g.SendMessage(content);
Console.ForegroundColor = ConsoleColor.Magenta;
Console.WriteLine("已向所有群推送今日新闻。");
Console.ForegroundColor = ConsoleColor.Gray;
}
}
if (now.Hour == 8 && now.Minute == 31)
{
Daily.DailyNews = false;
}
if (now.Hour == 0 && now.Minute == 0 && Daily.ClearDailys)
{
Daily.ClearDailys = false;
// 清空运势
Daily.UserDailys.Clear();
Daily.SaveDaily();
Console.ForegroundColor = ConsoleColor.Magenta;
Console.WriteLine("已重置所有人的今日运势。");
Console.ForegroundColor = ConsoleColor.Gray;
// 发放12点大挑战的奖励
//await Bot.Send12ClockPresents();
}
if (now.Hour == 0 && now.Minute == 1)
{
Daily.ClearDailys = true;
}
await Task.Delay(1000);
}
catch (Exception e)
{
Console.ForegroundColor = ConsoleColor.Red;
Console.WriteLine(e);
Console.ForegroundColor = ConsoleColor.Gray;
}
}
});
_ = Task.Factory.StartNew(async () =>
{
while (true)
{
try
{
await Task.Delay(1000 * 60);
foreach (long uid in BlackList.Times.Where(d => d.Value < 5).Select(d => d.Key))
{
BlackList.Times.Remove(uid);
}
// 清空所有已下载的图片,释放空间
string directory = AppDomain.CurrentDomain.BaseDirectory.ToString() + @"img\download\";
if (Directory.Exists(directory))
{
foreach (string file in Directory.GetFiles(directory))
{
try
{
File.Delete(file);
}
catch { }
}
}
}
catch (Exception e)
{
Console.ForegroundColor = ConsoleColor.Red;
Console.WriteLine(e);
Console.ForegroundColor = ConsoleColor.Gray;
}
}
});
bool isListening = true;
CancellationTokenSource cts = new();
CancellationToken ct = cts.Token;
Task t = Task.Factory.StartNew(() =>
{
// 循环接收消息,此线程会在没有请求时阻塞
while (isListening)
{
try
{
listener.GetContext();
}
catch (Exception e)
{
Console.ForegroundColor = ConsoleColor.Red;
Console.WriteLine(e);
Console.ForegroundColor = ConsoleColor.Gray;
}
}
}, ct);
while (true)
{
string read = Console.ReadLine() ?? "";
// OSM指令
if (read.Length >= 4 && read[..4] == ".osm")
{
MasterCommand.Execute(read, GeneralSettings.Master, false, GeneralSettings.Master, false);
continue;
}
switch (read.ToLower().Trim() ?? "")
{
case "debug on":
GeneralSettings.IsDebug = true;
Console.WriteLine("开启Debug模式");
break;
case "debug off":
GeneralSettings.IsDebug = false;
Console.WriteLine("关闭Debug模式");
break;
}
}
}
catch (Exception e)
{
Console.ForegroundColor = ConsoleColor.Red;
Console.WriteLine(e);
Console.ForegroundColor = ConsoleColor.Gray;
}
Console.ReadKey();