コード例 #1
0
    public static void AppStart(CQApi _CQApi, CQLog _CQLog)
    {
        CQApi = _CQApi;
        CQLog = _CQLog;
        InitAdminFile();

        if (ins == null)
        {
            ins = new List <TimeCheck>();
        }
        string        path = CQApi.AppDirectory;
        DirectoryInfo root = new DirectoryInfo(path);

        foreach (FileInfo f in root.GetFiles())
        {
            string name = f.Name;
            if (name.Contains("config-"))
            {
                int       start = name.IndexOf("-") + 1;
                int       end   = name.IndexOf(".json");
                long      group = long.Parse(name.Substring(start, end - start));
                TimeCheck temp  = new TimeCheck(group);
                ins.Add(temp);
                string json = ReadFromFile(path + name);
                temp.Initialize(json);
            }
        }
    }
コード例 #2
0
 /// <summary>
 /// 初始化 <see cref="CQFriendAddEventArgs"/> 类的新实例
 /// </summary>
 /// <param name="api">酷Q的接口实例</param>
 /// <param name="log">酷Q的日志实例</param>
 /// <param name="id">事件Id</param>
 /// <param name="type">事件类型</param>
 /// <param name="name">事件名称</param>
 /// <param name="function">函数名称</param>
 /// <param name="priority">默认优先级</param>
 /// <param name="subType">子类型</param>
 /// <param name="sendTime">发送时间</param>
 /// <param name="fromQQ">来源QQ</param>
 public CQFriendAddEventArgs(CQApi api, CQLog log, int id, int type, string name, string function, uint priority, int subType, int sendTime, long fromQQ)
     : base(api, log, id, type, name, function, priority)
 {
     this.SubType  = (CQFriendAddType)subType;
     this.SendTime = sendTime.ToDateTime();
     this.FromQQ   = new QQ(api, fromQQ);
 }
コード例 #3
0
ファイル: CQMain.cs プロジェクト: buger404/Robot-Alive
        public static void Main()
        {
            Native.Csharp.Sdk.Cqp.CQApi.Sender = new TaskReceiver();
            //传递假的container
            Register(FakeCoolQ);
            //注册假的CQ
            CQApi = new CQApi(404233);
            CQLog = new CQLog(404233);
            //取得注册的接口
            Startup      = FakeCoolQ.Resolve <ICQStartup>("酷Q启动事件");
            GroupMessage = FakeCoolQ.Resolve <IGroupMessage>("群消息处理");
            //触发假的启动事件
            Startup.CQStartup(null, new CQStartupEventArgs(CQApi, CQLog, 0, 0, "startup", "CQStartup", 0));

            //启动Tcp监听线程
            Thread t = new Thread(new ThreadStart(WebProcess.Listening));

            t.Start();

            //触发假的群聊事件
            if (NotTestInputing)
            {
                return;
            }
            while (true)
            {
                string content = Console.ReadLine();
                Console.WriteLine($"↓ 你:\n{content}");
                GroupMessage.GroupMessage(null, new CQGroupMessageEventArgs(CQApi, CQLog, 0, 0, "groupmessage", "CQGroupMessage", 0, 0,
                                                                            msgid, GroupID, QQID, "", content, false));
                msgid++;
            }
        }
コード例 #4
0
 public static void SendLog(string s)
 {
     if (CQLog != null)
     {
         CQLog.Info(s);
     }
 }
コード例 #5
0
 /// <summary>
 /// 初始化 <see cref="CQPrivateMessageEventArgs"/> 类的新实例
 /// </summary>
 /// <param name="api">酷Q的接口实例</param>
 /// <param name="log">酷Q的日志实例</param>
 /// <param name="id">事件id</param>
 /// <param name="type">事件类型</param>
 /// <param name="name">事件名称</param>
 /// <param name="function">事件函数名</param>
 /// <param name="priority">事件优先级</param>
 /// <param name="subType">消息子类型</param>
 /// <param name="msgId">消息ID</param>
 /// <param name="fromQQ">来源QQ</param>
 /// <param name="msg">消息内容</param>
 /// <param name="isRegex">是否为正则消息</param>
 public CQPrivateMessageEventArgs(CQApi api, CQLog log, int id, int type, string name, string function, uint priority, int subType, int msgId, long fromQQ, string msg, bool isRegex)
     : base(api, log, id, type, name, function, priority)
 {
     this.SubType = (CQPrviateMessageType)subType;
     this.FromQQ  = new QQ(api, fromQQ);
     this.Message = new QQMessage(api, msgId, msg, isRegex);
 }
コード例 #6
0
 /// <summary>
 /// 初始化 <see cref="CQStatusEventArgs"/> 类的新实例
 /// </summary>
 /// <param name="api">酷Q的接口实例</param>
 /// <param name="log">酷Q的日志实例</param>
 /// <param name="id">事件Id</param>
 /// <param name="name">名称</param>
 /// <param name="title">标题</param>
 /// <param name="function">函数名</param>
 /// <param name="period">刷新间隔</param>
 public CQStatusEventArgs(CQApi api, CQLog log, int id, string name, string title, string function, long period)
     : base(api, log, function)
 {
     this.Id     = id;
     this.Name   = name;
     this.Title  = title;
     this.Period = new TimeSpan(period * TimeSpan.TicksPerMillisecond);
 }
コード例 #7
0
 /// <summary>
 /// 初始化 <see cref="CQGroupManageChangeEventArgs"/> 类的新实例
 /// </summary>
 /// <param name="api">酷Q的接口实例</param>
 /// <param name="log">酷Q的日志实例</param>
 /// <param name="id">事件Id</param>
 /// <param name="type">事件类型</param>
 /// <param name="name">事件名称</param>
 /// <param name="function">函数名称</param>
 /// <param name="priority">默认优先级</param>
 /// <param name="subType">子类型</param>
 /// <param name="sendTime">发送时间</param>
 /// <param name="fromGroup">来源群</param>
 /// <param name="beingOperateQQ">被操作QQ</param>
 public CQGroupManageChangeEventArgs(CQApi api, CQLog log, int id, int type, string name, string function, uint priority, int subType, int sendTime, long fromGroup, long beingOperateQQ)
     : base(api, log, id, type, name, function, priority)
 {
     this.SubType        = (CQGroupManageChangeType)subType;
     this.SendTime       = sendTime.ToDateTime();
     this.FromGroup      = new Group(api, fromGroup);
     this.BeingOperateQQ = new QQ(api, beingOperateQQ);
 }
コード例 #8
0
        /// <summary>
        /// 由托管环境初始化的 <see cref="CQMenuExport"/> 的新实例
        /// </summary>
        static CQMenuExport()
        {
            api = AppInfo.UnityContainer.Resolve <CQApi> (AppInfo.Id);
            log = AppInfo.UnityContainer.Resolve <CQLog> (AppInfo.Id);

            // 调用方法进行实例化
            ResolveBackcall();
        }
コード例 #9
0
 /// <summary>
 /// 初始化 <see cref="CQGroupUploadEventArgs"/> 类的新实例
 /// </summary>
 /// <param name="api">酷Q的接口实例</param>
 /// <param name="log">酷Q的日志实例</param>
 /// <param name="id">事件Id</param>
 /// <param name="type">事件类型</param>
 /// <param name="name">事件名称</param>
 /// <param name="function">函数名称</param>
 /// <param name="priority">默认优先级</param>
 /// <param name="subType">子类型</param>
 /// <param name="sendTime">发送时间</param>
 /// <param name="fromGroup">来源群</param>
 /// <param name="fromQQ">来源QQ</param>
 /// <param name="file">文件信息</param>
 public CQGroupUploadEventArgs(CQApi api, CQLog log, int id, int type, string name, string function, uint priority, int subType, int sendTime, long fromGroup, long fromQQ, string file)
     : base(api, log, id, type, name, function, priority)
 {
     this.SubType   = (CQGroupFileUploadType)subType;
     this.SendTime  = sendTime.ToDateTime();
     this.FromGroup = new Group(api, fromGroup);
     this.FromQQ    = new QQ(api, fromQQ);
     this.FileInfo  = new GroupFileInfo(file);
 }
コード例 #10
0
 /// <summary>
 /// 初始化 <see cref="CQFriendAddRequestEventArgs"/> 类的新实例
 /// </summary>
 /// <param name="api">酷Q的接口实例</param>
 /// <param name="log">酷Q的日志实例</param>
 /// <param name="id">事件Id</param>
 /// <param name="type">事件类型</param>
 /// <param name="name">事件名称</param>
 /// <param name="function">函数名称</param>
 /// <param name="priority">默认优先级</param>
 /// <param name="subType">子类型</param>
 /// <param name="sendTime">发送时间</param>
 /// <param name="fromQQ">来源QQ</param>
 /// <param name="msg">附言</param>
 /// <param name="responseFlag">反馈标识</param>
 public CQFriendAddRequestEventArgs(CQApi api, CQLog log, int id, int type, string name, string function, uint priority, int subType, int sendTime, long fromQQ, string msg, string responseFlag)
     : base(api, log, id, type, name, function, priority)
 {
     this.SubType       = (CQFriendAddRequestType)subType;
     this.SendTime      = sendTime.ToDateTime();
     this.FromQQ        = new QQ(api, fromQQ);
     this.AppendMessage = msg;
     this.Request       = new QQRequest(api, responseFlag);
 }
コード例 #11
0
 /// <summary>
 /// 初始化 <see cref="CQEventEventArgs"/> 类的新实例
 /// </summary>
 /// <param name="api">酷Q的接口实例</param>
 /// <param name="log">酷Q的日志实例</param>
 /// <param name="id">事件id</param>
 /// <param name="type">类型</param>
 /// <param name="name">名称</param>
 /// <param name="function">函数名</param>
 /// <param name="priority">默认优先级</param>
 public CQEventEventArgs(CQApi api, CQLog log, int id, int type, string name, string function, uint priority)
     : base(api, log, function)
 {
     this.Id       = id;
     this.Type     = (CQMessageEventType)type;
     this.Name     = name;
     this.Priority = priority;
     this.Handler  = false;
 }
コード例 #12
0
ファイル: DebugerApp.xaml.cs プロジェクト: GScience/CQDebuger
        public static void AddLog(CQLogLevel logLevel, string category, string msg)
        {
            var debugLog = new CQLog(logLevel, category, msg);

            if (DebugWindow.Instance != null)
            {
                DebugWindow.Instance.AddLog(debugLog);
            }

            Console.WriteLine(debugLog.ToString());
        }
コード例 #13
0
ファイル: LocalDebuger.cs プロジェクト: buger404/NativeLocal
        public static void Launch()
        {
#if LOCAL_DEBUG
#else
            Console.ForegroundColor = ConsoleColor.Red;
            Console.WriteLine("~该dll已经正常编译,不可启动调试。~");
            Console.ReadLine();
            return;
#endif
            Console.ForegroundColor = ConsoleColor.Yellow;
            Console.WriteLine("~机器人本地测试工具~");
            Console.WriteLine("特殊指令:\n%setqq <qq> 设置测试用的QQ号\n%setgroup <group> 设置测试用的群号\n");
            Console.Write("输入测试用的QQ号:");
            QQID = long.Parse(Console.ReadLine());
            Console.Write("输入测试用的群号:");
            GroupID = long.Parse(Console.ReadLine());
            //传递假的container
            CQMain.Register(FakeCoolQ);
            //注册假的CQ
            CQApi = new CQApi(new Sdk.Cqp.Model.AppInfo("local_debuger", 0, 9, "local_debuger", "1.0.0", 10, "", "", 404233));
            CQLog = new CQLog(404233);
            //取得注册的接口
            Startup      = FakeCoolQ.Resolve <ICQStartup>("酷Q启动事件");
            GroupMessage = FakeCoolQ.Resolve <IGroupMessage>("群消息处理");
            //触发假的启动事件
            Startup.CQStartup(null, new CQStartupEventArgs(CQApi, CQLog, 0, 0, "startup", "CQStartup", 0));

            //触发假的群聊事件
            while (true)
            {
                Console.ForegroundColor = ConsoleColor.White;
                Console.Write("QQ" + QQID + "@" + GroupID + ">");
                string content = Console.ReadLine();
                if (content.StartsWith("%"))
                {
                    string[] p = content.Split(' ');
                    if (p[0] == "%setqq")
                    {
                        QQID = long.Parse(p[1]);
                    }
                    if (p[0] == "%setgroup")
                    {
                        GroupID = long.Parse(p[1]);
                    }
                }
                else
                {
                    GroupMessage.GroupMessage(null, new CQGroupMessageEventArgs(CQApi, CQLog, 0, 0, "groupmessage", "CQGroupMessage", 0, 0,
                                                                                msgid, GroupID, QQID, "", content, false));
                    msgid++;
                }
            }
        }
コード例 #14
0
 /// <summary>
 /// 初始化 <see cref="CQGroupMemberDecreaseEventArgs"/> 类的新实例
 /// </summary>
 /// <param name="api">酷Q的接口实例</param>
 /// <param name="log">酷Q的日志实例</param>
 /// <param name="id">事件ID</param>
 /// <param name="type">事件类型</param>
 /// <param name="name">事件名称</param>
 /// <param name="function">函数名称</param>
 /// <param name="priority">默认优先级</param>
 /// <param name="subType">子类型</param>
 /// <param name="sendTime">发送时间</param>
 /// <param name="fromGroup">来源群</param>
 /// <param name="fromQQ">来源QQ</param>
 /// <param name="beingOperateQQ">被操作QQ</param>
 public CQGroupMemberDecreaseEventArgs(CQApi api, CQLog log, int id, int type, string name, string function, uint priority, int subType, int sendTime, long fromGroup, long fromQQ, long beingOperateQQ)
     : base(api, log, id, type, name, function, priority)
 {
     this.SubType   = (CQGroupMemberDecreaseType)subType;
     this.SendTime  = sendTime.ToDateTime();
     this.FromGroup = new Group(api, fromGroup);
     if (subType == 2)               // 仅仅当类型为2时存在 FromQQ
     {
         this.FromQQ = new QQ(api, fromQQ);
     }
     this.BeingOperateQQ = new QQ(api, beingOperateQQ);
 }
コード例 #15
0
 private static int Initialize(int authCode)
 {
     // 向容器注册一个 CQApi 实例
     api = new CQApi(authCode);
     Common.AppInfo.UnityContainer.RegisterInstance <CQApi> ("me.cqp.ritsukage.RitsukageBot", api);
     // 向容器注册一个 CQLog 实例
     log = new CQLog(authCode);
     Common.AppInfo.UnityContainer.RegisterInstance <CQLog> ("me.cqp.ritsukage.RitsukageBot", log);
     // 注册插件全局异常捕获回调, 用于捕获未处理的异常, 回弹给 酷Q 做处理
     AppDomain.CurrentDomain.UnhandledException += CurrentDomain_UnhandledException;
     // 本函数【禁止】处理其他任何代码,以免发生异常情况。如需执行初始化代码请在Startup事件中执行(Type=1001)。
     return(0);
 }
コード例 #16
0
        private static int Initialize(int authCode)
        {
            AppInfo appInfo = new AppInfo(pInfo.name, pInfo.ret, pInfo.apiver, pInfo.name, pInfo.version, pInfo.version_id, pInfo.author, pInfo.description, authCode);

            cqApi = new CQApi(appInfo);
            cqLog = new CQLog(authCode);
            // 注册插件全局异常捕获回调, 用于捕获未处理的异常
            AppDomain.CurrentDomain.UnhandledException += CurrentDomain_UnhandledException;
            // 事件回调
            Event_eventEnableHandler     += AppEnableInterface.AppEnable;
            Event_eventGroupMsgHandler   += GroupMessageInterface.GroupMessage;
            Event_eventPrivateMsgHandler += PrivateMessageInterface.PrivateMessage;
            return(0);
        }
コード例 #17
0
 /// <summary>
 /// 初始化 <see cref="CQGroupMessageEventArgs"/> 类的新实例
 /// </summary>
 /// <param name="api">酷Q的接口实例</param>
 /// <param name="log">酷Q的日志实例</param>
 /// <param name="id">事件Id</param>
 /// <param name="type">事件类型</param>
 /// <param name="name">事件名称</param>
 /// <param name="function">函数名称</param>
 /// <param name="priority">默认优先级</param>
 /// <param name="subType">子类型</param>
 /// <param name="msgId">消息Id</param>
 /// <param name="fromGroup">来源群号</param>
 /// <param name="fromQQ">来源QQ</param>
 /// <param name="fromAnonymous">来源匿名</param>
 /// <param name="msg">消息内容</param>
 /// <param name="isRegex">是否正则消息</param>
 public CQGroupMessageEventArgs(CQApi api, CQLog log, int id, int type, string name, string function, uint priority, int subType, int msgId, long fromGroup, long fromQQ, string fromAnonymous, string msg, bool isRegex)
     : base(api, log, id, type, name, function, priority)
 {
     this.SubType         = (CQGroupMessageType)subType;
     this.Message         = new QQMessage(api, msgId, msg, isRegex);
     this.FromGroup       = new Group(api, fromGroup);
     this.FromQQ          = new QQ(api, fromQQ);
     this.IsFromAnonymous = fromQQ == 80000000 && !string.IsNullOrEmpty(fromAnonymous);
     if (this.IsFromAnonymous)
     {
         this.FromAnonymous = new GroupMemberAnonymousInfo(fromAnonymous);
     }
     else
     {
         this.FromAnonymous = null;
     }
 }
コード例 #18
0
        /// <summary>
        /// 初始化 <see cref="CQGroupBanSpeakEventArgs"/> 类的新实例
        /// </summary>
        /// <param name="api">酷Q的接口实例</param>
        /// <param name="log">酷Q的日志实例</param>
        /// <param name="id">事件Id</param>
        /// <param name="type">事件类型</param>
        /// <param name="name">事件名称</param>
        /// <param name="function">函数名称</param>
        /// <param name="priority">默认优先级</param>
        /// <param name="subType">子类型</param>
        /// <param name="sendTime">发送时间</param>
        /// <param name="fromGroup">来源群</param>
        /// <param name="fromQQ">来源QQ</param>
        /// <param name="beingOperateQQ">被操作QQ</param>
        /// <param name="duration">禁言时长, 单位: 秒</param>
        public CQGroupBanSpeakEventArgs(CQApi api, CQLog log, int id, int type, string name, string function, uint priority, int subType, int sendTime, long fromGroup, long fromQQ, long beingOperateQQ, long duration)
            : base(api, log, id, type, name, function, priority)
        {
            this.SubType       = (CQGroupBanSpeakType)subType;
            this.SendTime      = sendTime.ToDateTime();
            this.FromGroup     = new Group(api, fromGroup);
            this.FromQQ        = new QQ(api, fromQQ);
            this.IsAllBanSpeak = beingOperateQQ == 0;
            if (!this.IsAllBanSpeak)
            {
                this.BeingOperateQQ = new QQ(api, beingOperateQQ);
            }

            if (subType == 2)               // 当子类型为 2 时才有
            {
                this.BanSpeakTimeSpan = TimeSpan.FromSeconds(duration);
            }
        }
コード例 #19
0
 /// <summary>
 /// 初始化 <see cref="CQMenuEventArgs"/> 类的新实例
 /// </summary>
 /// <param name="api">酷Q的接口实例</param>
 /// <param name="log">酷Q的日志实例</param>
 /// <param name="name">菜单名称</param>
 /// <param name="function">函数名</param>
 public CQMenuEventArgs(CQApi api, CQLog log, string name, string function)
     : base(api, log, function)
 {
     this.Name = name;
 }
コード例 #20
0
 /// <summary>
 /// 初始化 <see cref="CQMenuCallEventArgs"/> 类的新实例
 /// </summary>
 /// <param name="api">酷Q的接口实例</param>
 /// <param name="log">酷Q的日志实例</param>
 /// <param name="name">菜单名称</param>
 /// <param name="function">菜单函数</param>
 public CQMenuCallEventArgs(CQApi api, CQLog log, string name, string function)
     : base(api, log, name, function)
 {
 }
コード例 #21
0
 /// <summary>
 /// 初始化 <see cref="CQStatusUpdateEventArgs"/> 类的新实例
 /// </summary>
 /// <param name="api">酷Q的接口实例</param>
 /// <param name="log">酷Q的日志实例</param>
 /// <param name="id">悬浮窗id</param>
 /// <param name="name">名称</param>
 /// <param name="title">英文名称</param>
 /// <param name="function">函数名称</param>
 /// <param name="period">更新间隔</param>
 public CQStatusUpdateEventArgs(CQApi api, CQLog log, int id, string name, string title, string function, long period)
     : base(api, log, id, name, title, function, period)
 {
 }
コード例 #22
0
 public static void setModel(CQApi _API, CQLog _LOG)
 {
     CQApi = _API;
     CQLog = _LOG;
 }
コード例 #23
0
ファイル: Init.cs プロジェクト: m839336369/YiXian_Client
 public static void GetCqData(CQApi cQApi, CQLog cQLog)
 {
     GeneralControl.CQApi = cQApi;
     GeneralControl.CQLog = cQLog;
 }
コード例 #24
0
ファイル: Main.cs プロジェクト: Superbia-zyb/AiBot
        public static void Initialize(CQLog log)
        {
            if (!File.Exists("config.json"))
            {
                FileStream   configFile = new FileStream("config.json", FileMode.OpenOrCreate);
                StreamReader reader     = new StreamReader(
                    System.Reflection.Assembly.GetExecutingAssembly().GetManifestResourceStream("vip.popop.pcr.GHelper.Resources.default.json")
                    );
                StreamWriter writer      = new StreamWriter(configFile);
                string       defaultJson = reader.ReadToEnd();
                writer.Write(defaultJson);
                Config = JsonConvert.DeserializeObject <Configuration>(defaultJson);
                reader.Close();
                writer.Close();
                configFile.Close();
            }
            else
            {
                FileStream   configFileO  = new FileStream("config.json", FileMode.Open);
                StreamReader configReader = new StreamReader(configFileO);
                Config = JsonConvert.DeserializeObject <Configuration>(configReader.ReadToEnd());
                configReader.Close();
                configReader.Dispose();
                configFileO.Close();
            }

            Event_GroupMessage.ClearHandler();
            Event_PrivateMessage.ClearHandler();

            accountManager = new Account {
                logger = log
            };
            accountManager.OnInitialize();

            if (Config.IsPhonographEnabled)
            {
                phonograph = new Phonograph {
                    Client     = (Phonograph.ClientType)Enum.Parse(typeof(Phonograph.ClientType), Config.Phonograph.Platform),
                    IsWithLink = Config.Phonograph.WithLink
                };
                phonograph.OnInitialize();
            }

            if (Config.IsRepeaterEnabled)
            {
                repeater = new Repeater {
                    repeatChance = Config.Repeater.RepeatChance,
                    cooldown     = Config.Repeater.Cooldown,
                    banWords     = Config.Repeater.BanWords
                };
                repeater.OnInitialize();
            }

            if (Config.IsSleepHelperEnabled)
            {
                sleepHelper = new SleepHelper {
                };
                sleepHelper.OnInitialize();
            }

            if (Config.IsLinkGeneratorEnabled)
            {
                linkGenerator = new LinkGenerator {
                };
                linkGenerator.OnInitialize();
            }

            if (Config.IsSoloEnabled)
            {
                solo = new Solo {
                    validSpan = Config.Solo.ValidSpan,
                    checkTime = Config.Solo.CheckTime,
                    maxStack  = Config.Solo.MaxStack
                };
                solo.OnInitialize();
            }

            if (Config.IsForestEnabled)
            {
                forest = new Forest()
                {
                    Logger = log
                };
                forest.OnInitialize();
            }

            //letTheyOut = new LetThemOut {

            //};
            //letTheyOut.OnInitialize();
        }
コード例 #25
0
 /// <summary>
 /// 初始化 <see cref="CQAppDisableEventArgs"/> 类的新实例
 /// </summary>
 /// <param name="api">酷Q的接口实例</param>
 /// <param name="log">酷Q的日志实例</param>
 /// <param name="id">事件id</param>
 /// <param name="type">类型</param>
 /// <param name="name">名称</param>
 /// <param name="function">函数名</param>
 /// <param name="priority">默认优先级</param>
 public CQAppDisableEventArgs(CQApi api, CQLog log, int id, int type, string name, string function, uint priority)
     : base(api, log, id, type, name, function, priority)
 {
 }
コード例 #26
0
 /// <summary>
 /// 初始化 <see cref="CQEventArgs"/> 类的新实例
 /// </summary>
 /// <param name="api">酷Q的接口实例</param>
 /// <param name="log">酷Q的日志实例</param>
 /// <param name="function">触发此事件的函数名称</param>
 public CQEventArgs(CQApi api, CQLog log, string function)
 {
     this.CQApi    = api;
     this.CQLog    = log;
     this.Function = function;
 }
コード例 #27
0
 public void AddLog(CQLog debugLog)
 {
     LogList.Items.Add(debugLog);
     LogList.ScrollIntoView(LogList.Items[LogList.Items.Count - 1]);
 }