Files
QQBot/Main.cs
MelodyMaster 5ca29d24d6 error
2025-06-12 11:28:05 +08:00

168 lines
7.1 KiB
C#
Raw Permalink 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 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");
}
}