168 lines
7.1 KiB
C#
168 lines
7.1 KiB
C#
using System;
|
||
using System.Net.Http;
|
||
using System.Text.Json;
|
||
using System.Text.RegularExpressions;
|
||
using Microsoft.AspNetCore.Builder;
|
||
using Microsoft.AspNetCore.Http;
|
||
using Microsoft.AspNetCore.Mvc.Diagnostics;
|
||
using Microsoft.Extensions.DependencyInjection;
|
||
using QQBot;
|
||
using QQBot.Command;
|
||
using QQBot.Event;
|
||
using QQBot.SQL;
|
||
|
||
class Nebulamist
|
||
{
|
||
static async Task Main(string[] args)
|
||
{
|
||
Console.WriteLine("===!连接SQL数据库中!===");
|
||
Mysql.InitSql();
|
||
if (!Mysql.IsSql)
|
||
{
|
||
Console.WriteLine("!错误! SQL没有正确连接,插件不会启用!");
|
||
}
|
||
if (Mysql.IsSql)
|
||
{
|
||
Console.WriteLine("===!SQL数据已成功连接!===");
|
||
Console.WriteLine("===!正在启动机器人!===");
|
||
|
||
await Start(args); // 启动 Web 应用程序
|
||
}
|
||
}
|
||
|
||
static async Task Start(string[] args)
|
||
{
|
||
var builder = WebApplication.CreateBuilder(args);
|
||
|
||
|
||
// 添加 HttpClient 工厂支持
|
||
builder.Services.AddHttpClient();
|
||
var app = builder.Build();
|
||
|
||
// 创建 Web 应用构建器
|
||
|
||
|
||
// 使用中间件处理传入的请求
|
||
app.Use(async (context, next) =>
|
||
{
|
||
// 如果是 POST 请求,且路径为根路径("/")
|
||
if (context.Request.Method == "POST" && context.Request.Path == "/")
|
||
{
|
||
// 从请求体中读取原始 JSON 字符串
|
||
using var reader = new StreamReader(context.Request.Body);
|
||
string body = await reader.ReadToEndAsync();
|
||
|
||
// 反序列化为 JsonElement 对象
|
||
var json = JsonSerializer.Deserialize<JsonElement>(body);
|
||
|
||
// 检查是否包含 "message" 属性,且该属性是一个数组
|
||
if (json.TryGetProperty("message", out var messageArray) &&
|
||
messageArray.ValueKind == JsonValueKind.Array)
|
||
{
|
||
// 遍历消息段数组
|
||
foreach (var segment in messageArray.EnumerateArray())
|
||
{
|
||
// 检查是否包含 "data" 字段,且其包含 "text" 字段
|
||
if (segment.TryGetProperty("data", out var data) &&
|
||
data.TryGetProperty("text", out var textValue))
|
||
{
|
||
// 获取消息文本
|
||
string messageText = textValue.GetString();
|
||
|
||
// 如果消息为 "cx",调用 CX 命令处理器
|
||
if (messageText == "cx" || messageText == "c")
|
||
{
|
||
Console.WriteLine("收到 /cx 命令");
|
||
await Cx_Text.HandleCx_TextCommand(json);
|
||
break;
|
||
}
|
||
|
||
// 重新反序列化事件数据(可能用于另一个处理器)
|
||
var eventData = JsonSerializer.Deserialize<JsonElement>(body); // 确保此处定义 eventData
|
||
|
||
// 如果消息为 "CX",调用 CS 命令处理器
|
||
if (messageText == "CX" || messageText == "C")
|
||
{
|
||
Console.WriteLine("收到 /CX 命令");
|
||
await CX_Picture.HandleCx_PictureCommand(eventData);
|
||
break;
|
||
}
|
||
|
||
// 如果消息为 "h",调用 H 模块的问候处理器
|
||
if (messageText == "h" || messageText == "H")
|
||
{
|
||
Console.WriteLine("收到 /h 命令");
|
||
await Help.HandleHelpCommand(json);
|
||
break;
|
||
}
|
||
|
||
// 如果消息为 "cnm",调用 CNM 模块的处理器
|
||
if (messageText == "cnm")
|
||
{
|
||
Console.WriteLine("收到 /cnm 命令");
|
||
await Cnm.HandleCnmCommand(json);
|
||
break;
|
||
}
|
||
|
||
// 如果消息为 "status" || "st",调用状态模块的处理器
|
||
if (messageText == "status" || messageText == "st")
|
||
{
|
||
Console.WriteLine("收到 /status 命令");
|
||
await Status.HandleStatusCommand(json);
|
||
break;
|
||
}
|
||
|
||
// 如果消息为 "超碧",调用状态模块的处理器
|
||
if (messageText == "超碧" || messageText == "13" || messageText == "chao" || messageText == "bi" || messageText == "超" || messageText == "朝" || messageText == "炒" || messageText == "抄" || messageText == "潮")
|
||
{
|
||
Console.WriteLine("收到 /炒币 命令");
|
||
await Chao13.HandleChao13Command(json);
|
||
break;
|
||
}
|
||
|
||
// 在消息段处理部分添加
|
||
if (messageText.StartsWith("link ", StringComparison.OrdinalIgnoreCase) ||
|
||
messageText.Equals("link", StringComparison.OrdinalIgnoreCase))
|
||
{
|
||
|
||
// Fix for CS7036: Add the missing "messageText" parameter when calling Link.HandleLinkCommand
|
||
if (messageText.StartsWith("link ", StringComparison.OrdinalIgnoreCase) ||
|
||
messageText.Equals("link", StringComparison.OrdinalIgnoreCase))
|
||
{
|
||
await Link.HandleLinkCommand(eventData, messageText);
|
||
return;
|
||
}
|
||
}
|
||
|
||
// 可以继续添加其他关键词处理逻辑
|
||
}
|
||
}
|
||
}
|
||
}
|
||
|
||
// 调用下一个中间件(如果存在)
|
||
await next();
|
||
});
|
||
|
||
// 设置 POST 路由 "/" 返回空 JSON 响应
|
||
app.MapPost("/", async context =>
|
||
{
|
||
await context.Response.WriteAsync("{}");
|
||
});
|
||
Console.WriteLine("[千空之星QQ机器人API系统] 即将开启 ");
|
||
// 修复 CS7036 错误:为 SendAPI.Start 提供所需的参数
|
||
SendAPI.Start(args); // 启动发送 API
|
||
// 控制台输出启动信息
|
||
Console.WriteLine("[千空之星QQ机器人] 即将开启 ");
|
||
Console.WriteLine("已启动HTTP服务 ");
|
||
Console.WriteLine("HTTP 服务启动于 http://localhost:5000");
|
||
|
||
// 启动 Web 应用并监听指定地址
|
||
await app.RunAsync("http://localhost:5000");
|
||
|
||
|
||
|
||
|
||
}
|
||
}
|