예제 #1
0
 private string GetPluginString(MessagePlugin plugin)
 {
     return
         (string.Format("{0} ({1}){2}",
                        plugin.Name,
                        plugin.GetType().Name,
                        plugin is CommandPlugin cmd ? $" ({string.Join(", ", cmd.Commands)})" : ""));
 }
예제 #2
0
 /// <summary>
 /// 批量保存
 /// </summary>
 /// <param name="bulkSize"></param>
 /// <returns></returns>
 public virtual int BulkSaveChanges(bool validateOnSaveEnabled = true, int bulkSize = 64)
 {
     // 发送消息
     Messager.SendMessage(dbContext, CurrentMessager);
     if (MessagePlugin != null)
     {
         MessagePlugin.ApplyChange();
     }
     return(dbContext.BulkSaveChanges(validateOnSaveEnabled, bulkSize));
 }
예제 #3
0
        /// <summary>
        /// 保存修改
        /// </summary>
        /// <returns></returns>
        public virtual int SaveChanges()
        {
            try
            {
                // 发送消息
                Messager.SendMessage(dbContext, CurrentMessager);
                if (MessagePlugin != null)
                {
                    MessagePlugin.ApplyChange();
                }

                ObjectContext objectContext = ((IObjectContextAdapter)this.dbContext).ObjectContext;
                // 获取变化的实体信息
                var changeList = objectContext.ObjectStateManager
                                 .GetObjectStateEntries(EntityState.Added | EntityState.Modified | System.Data.Entity.EntityState.Deleted)
                                 .Select(c => new EntityInfo
                {
                    TableName   = this.GetTableName(c.Entity),
                    StateEntity = c,
                    ColumnList  = GetEntityInfo(c)
                })
                                 .Where(c => !string.IsNullOrWhiteSpace(c.TableName))
                                 .ToList();

                foreach (var item in changeList)
                {
                    // 判断该表是否忽略保存
                    if (IgnoreEntityEntityList.Contains(item.TableName))
                    {
                        item.StateEntity.AcceptChanges();
                    }
                }
                return(this.dbContext.SaveChanges());
            }
            catch (DbEntityValidationException dbEx)
            {
                foreach (var validationErrors in dbEx.EntityValidationErrors)
                {
                    foreach (var validationError in validationErrors.ValidationErrors)
                    {
                        text(string.Format("Class: {0}, Property: {1}, Error: {2}", validationErrors.Entry.Entity.GetType().FullName,
                                           validationError.PropertyName,
                                           validationError.ErrorMessage));
                    }
                }
                throw dbEx;
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }
예제 #4
0
        private CoolQRouteMessage DisablePlugin()
        {
            var inputs = EnabledPlugin.Split(',');

            if (inputs.Length == 1)
            {
                MessagePlugin plugin = InnerGetPlugin(EnabledPlugin);
                if (plugin == null)
                {
                    return(_routeMsg.ToSource($"指定插件 \"{EnabledPlugin}\" 不存在."));
                }

                if (_disabled.Contains(plugin.Guid))
                {
                    return(_routeMsg.ToSource($"指定插件 \"{GetPluginString(plugin)}\" 已被禁用."));
                }

                _disabled.Add(plugin.Guid);
                SaveDisableSettings();
                return(_routeMsg.ToSource($"已经禁用插件 \"{GetPluginString(plugin)}\"."));
            }

            var sb      = new StringBuilder();
            var plugins = inputs.Select(k => (k, InnerGetPlugin(k)));

            foreach (var(input, plugin) in plugins)
            {
                sb.Append(input + ": ");
                if (plugin == null)
                {
                    sb.AppendLine($"指定插件 \"{input}\" 不存在.");
                    continue;
                }
                if (_disabled.Contains(plugin.Guid))
                {
                    sb.AppendLine($"指定插件 \"{GetPluginString(plugin)}\" 已被禁用.");
                    continue;
                }
                _disabled.Add(plugin.Guid);
                sb.AppendLine($"已经禁用插件 \"{GetPluginString(plugin)}\".");
            }

            SaveDisableSettings();
            return(_routeMsg.ToSource(sb.ToString().Trim('\n', '\r')));
        }
예제 #5
0
        public static async Task Main()
        {
            Configure();

            MiraiHttpSessionOptions options = new MiraiHttpSessionOptions(configuration["ip"], Convert.ToInt32(configuration["port"]), configuration["authKey"]);
            MessagePlugin           plugin  = new MessagePlugin(db, configuration, commandList);
            MiraiHttpSession        session = new MiraiHttpSession();

            session.AddPlugin(plugin);
            // 使用上边提供的信息异步连接到 mirai-api-http
            await session.ConnectAsync(options, Convert.ToInt64(configuration["botQQ"])); //机器人QQ号

            Console.WriteLine("服务启动~~");
            while (true)
            {
                Thread.Sleep(1000);
                if (await Console.In.ReadLineAsync() == "exit")
                {
                    return;
                }
            }
        }