public override async void ShowHelpMessage(AcceptedMessage message, string[] args) { var str = "=== Vtuber天狗机器人使用指南 === (指令中的参数如果需要空格请使用%代替空格)\r\n"; str += string.Join("\r\n", Observer.Processors.Where(v => v != this && !string.IsNullOrEmpty(v.HelpMessage)) .Select(v => v.HelpMessage)); str += "\r\n机器人进入维护状态,将不会增加新功能,如有问题请使用!留言 告知"; if (message.IsGroupMessage) { await SendingService.SendGroupMessageAsync(message.FromGroup, str); } else { await SendingService.SendPrivateMessageAsync(message.FromUser, str); } }
public virtual void Process(AcceptedMessage message) { if (!message.IsGroupMessage) { SendingService.SendPrivateMessageAsync(message.FromUser, "暂不支持私聊互动"); return; } var methods = GetType().GetMethods().Where(v => v.IsDefined(typeof(BotCommandAttribute), false)); var atts = methods.Select(v => v.GetCustomAttributes(false).First(att => att.GetType() == typeof(BotCommandAttribute))) .Select(v => (BotCommandAttribute)v); var handled = false; var args = message.Content.Trim().Split(' ').Select(v => v.Replace("%", " ")).ToArray(); foreach (var method in methods) { var attr = method.GetCustomAttributes(false); var commandAttr = attr.FirstOrDefault(v => v.GetType() == typeof(BotCommandAttribute)); var commandPermission = attr.FirstOrDefault(v => v.GetType() == typeof(CommandPermissionsAttribute)); if (commandAttr != null) { var info = (BotCommandAttribute)commandAttr; if (args.Length == info.ProcessLength || info.ProcessLength == 0) { if (!string.IsNullOrEmpty(info.SubCommandName)) { if (args.Length <= info.SubCommandOffset) { continue; } if (!args[info.SubCommandOffset].EqualsIgnoreCase(info.SubCommandName)) { continue; } } else { if (atts.Any(v => !string.IsNullOrEmpty(v.SubCommandName) && args.Length > v.SubCommandOffset && args[v.SubCommandOffset] == v.SubCommandName)) { continue; } } try { handled = true; if (commandPermission != null) { var config = Config.DefaultConfig.GroupConfigs.FirstOrDefault( v => v.GroupId == message.FromGroup); var permissionInfo = (CommandPermissionsAttribute)commandPermission; if (config == null || permissionInfo.Permissions.Any(v => config.Permissions.Contains(v))) { SendingService.SendGroupMessageAsync(message.FromGroup, $"您没有权限执行这个操作.") .GetAwaiter().GetResult(); return; } } method.Invoke(this, new object[] { message, args }); } catch (Exception ex) { LogHelper.Error("处理消息时出现未知异常 包名:" + GetType() + " 函数名: " + method.Name, true, ex); SendingService.SendGroupMessageAsync(message.FromGroup, $"处理请求时出现未知异常,处理函数: {method.Name}"); } } } } if (!handled) { ShowHelpMessage(message, args); } }