示例#1
0
        public void ServerQueryUserRegistrationCommand(BotCommandEventArgs e)
        {
            using (var db = new CoreContext())
            {
                var user = UserManager.QueryUser(Subscriber.SubscriberId, Subscriber.SubscriberUniqueId, e.MessageInfo.InvokerUniqueId);

                Models.ServerQueryUser sqUser = new Models.ServerQueryUser()
                {
                    UserId = user.UserId,
                    Users  = user,
                    //SubscriberId = user.SubscriberId,
                    ServerQueryUsername = e.CommandInfo["username"].Value,
                    ServerQueryPassword = e.CommandInfo["password"].Value,
                };

                Lyralei.Core.ServerQueryConnection.Models.Subscribers subscriberUserCredentials = new Lyralei.Core.ServerQueryConnection.Models.Subscribers()
                {
                    AdminPassword      = sqUser.ServerQueryPassword,
                    AdminUsername      = sqUser.ServerQueryUsername,
                    ServerIp           = Subscriber.ServerIp,
                    ServerPort         = Subscriber.ServerPort,
                    SubscriberId       = Subscriber.SubscriberId,
                    SubscriberUniqueId = Subscriber.SubscriberUniqueId,
                    VirtualServerId    = Subscriber.VirtualServerId,
                };

                Core.ServerQueryConnection.ServerQueryConnection ServerQueryConnection = new Core.ServerQueryConnection.ServerQueryConnection(subscriberUserCredentials);

                Thread thread = new Thread((ThreadStart) new SynchronizationCallback(ServerQueryConnection.InitializeQuiet));
                thread.Start();
                thread.Join();

                try
                {
                    if (ServerQueryConnection.AsyncTcpDispatcher.IsConnected)
                    {
                        var test = ServerQueryConnection.whoAmI;

                        if (test == null)
                        {
                            throw new Exception("Login failure");
                        }
                        if (test.IsErroneous)
                        {
                            throw new Exception(test.ResponseText);
                        }
                        else
                        {
                            db.ServerQueryUser.Add(sqUser);
                            db.SaveChanges();

                            ServerQueryConnection.Logout();
                            ServerQueryConnection.Disconnect();

                            //User successfully registered
                            ServerQueryConnection.TextReply(e.MessageInfo, "Successfully registered! You can now execute serverquery commands directly to me based on your user permissions.");
                        }
                    }
                }
                catch (Exception ex)
                {
                    logger.Debug(ex, "User failed to register");
                    ServerQueryConnection.TextReply(e.MessageInfo, "Whoops! Did you put in the right details?");
                }
            }
        }