Пример #1
0
        public ActionResult Delete(int id)
        {
            SupportProvider newsProvider = new SupportProvider();
            var             result       = newsProvider.Delete(id);

            return(RedirectToAction("InfoSupport"));
            //Json(new AccessEntityResult { Status = result, Data = id, Message = "" });
        }
Пример #2
0
        public ActionResult Edit(int id)
        {
            SupportProvider       newsProvider = new SupportProvider();
            Support               support      = newsProvider.GetByID(id);
            List <SelectListItem> items        = new List <SelectListItem>();

            items.Add(new SelectListItem {
                Value = "1", Text = "Sử dụng", Selected = support == null ? false : support.Status == 1
            });
            items.Add(new SelectListItem {
                Value = "0", Text = "Không sử dụng", Selected = support == null ? false : support.Status == 0
            });
            ViewBag.Status = items;
            return(View(support));
        }
Пример #3
0
        public async Task Claim(SupportProvider supportProvider)
        {
            await Bot.SendTextMessageAsync(supportProvider.TelegramID, Resources.SupportUserAcceptTicket);

            await Bot.SendTextMessageAsync(Target,
                                           string.Format(Resources.UserTicketIsAccepted, supportProvider.Name));

            Owner       = supportProvider;
            Owner.State = ESupportProviderState.IN_PROGRESS;
            State       = ETicketState.IN_PROGRESS;

            foreach (var msg in Messages.Where(m => m.Sender == Target && m.Content != "/start"))
            {
                await Bot.SendTextMessageAsync(supportProvider.TelegramID, $"User: {msg.Content}");
            }
        }
Пример #4
0
        public async Task Close()
        {
            // close the ticket
            State = ETicketState.FINISHED;
            // TODO send client feedback scale?
            await Bot.SendTextMessageAsync(Target, Resources.UserTicketClosed);

            if (Owner != null)
            {
                await Bot.SendTextMessageAsync(Owner.TelegramID, Resources.SupportUserTicketClosed);

                await SupportProvider.ICantHelpAnymore(Owner.TelegramID);

                Owner.State = ESupportProviderState.WAITING_FOR_TICKETS;
            }
            foreach (var shuffledTicket in Data.OpenTickets)
            {
                await shuffledTicket.SendQueueUpdate();
            }
        }
Пример #5
0
        public static async Task Initialise()
        {
            Data = ProgramData.LoadFromFile() ?? new ProgramData();
            Data.BeginSaveTask();

            var token = m_botKey.Value;

            if (string.IsNullOrEmpty(token))
            {
                Console.WriteLine("Bot Token: ");
                token = Console.ReadLine();
            }
            Bot = new TelegramBotClient(token);
            var me = await Bot.GetMeAsync();

            Logger.Info($"Logged in as {me.FirstName} ({me.Id})");
            Bot.OnMessage       += HandleMessage;
            Bot.OnCallbackQuery += HandleCallback;
            Bot.StartReceiving();

            var thinkTask = new Task(async() =>
            {
                while (true)
                {
                    await SupportProvider.Think();
                    foreach (var ticket in Data.Tickets.Where(t => t.State != ETicketState.FINISHED))
                    {
                        await ticket.Think();
                    }
                    await Task.Delay(TimeSpan.FromSeconds(1));
                }
            });

            thinkTask.Start();

            while (true)
            {
                var input = Console.ReadLine();
                CommandManager.Execute(input);
            }
        }
Пример #6
0
 public ActionResult Create(Support model)
 {
     model.Group = 0;
     if (ModelState.IsValid)
     {
         SupportProvider newsProvider = new SupportProvider();
         var             result       = newsProvider.Add(model);
         if (result.Status == AccessEntityStatusCode.OK)
         {
             return(RedirectToAction("InfoSupport"));
         }
         else
         {
             ModelState.AddModelError("error", "Không thêm được thông tin");
             return(View(model));
         }
     }
     else
     {
         return(View(model));
     }
     //return Json(new AccessEntityResult { Status = AccessEntityStatusCode.ModelFailed, Message = "Thông tin hỗ trợ không hợp lệ, thử lại." });
 }
Пример #7
0
        public static async Task HandleMessageAsync(object sender, MessageEventArgs e)
        {
            var messageContent = e.Message.Text;
            var userID         = e.Message.From.Id;

            Logger.Debug($"Message from {userID}: {messageContent}");
            if (e.Message.ForwardFrom != null)
            {
                Logger.Debug($"Message forwarded from {e.Message.ForwardFrom.Id}");
            }

            // Check if user is a support provider
            var sup = Data.SupportProviders.SingleOrDefault(s => s.TelegramID == userID);

            // Check if user is admin adding new Support Provider
            if (m_admins.Value.Any(u => u == userID))
            {
                if (messageContent == "/addnew")
                {
                    var newCode = KeyGenerator.GetUniqueKey(32);
                    Data.SupportProviderTokens.Add(newCode);
                    await Bot.SendTextMessageAsync(userID, Resources.AdminNewSupportProviderToken);

                    await Bot.SendTextMessageAsync(userID, newCode);

                    return;
                }
                if (sup == null)
                {
                    sup = new SupportProvider(e.Message.From);
                    Data.SupportProviders.Add(sup);
                    await Bot.SendTextMessageAsync(userID, Resources.AdminHelp);
                }
            }

            if (Data.SupportProviderTokens.Contains(messageContent))
            {
                // Redeem support provider
                if (sup == null)
                {
                    Data.SupportProviderTokens.Remove(messageContent);
                    sup = new SupportProvider(e.Message.From);
                    Data.SupportProviders.Add(sup);
                    await Bot.SendTextMessageAsync(userID, Resources.SupportProviderTokenRedeemed);
                }
                else
                {
                    await Bot.SendTextMessageAsync(userID, Resources.SupportProviderTokenAlreadyRedeemed);
                }
                // Remove any open tickets by new SP
                Data.Tickets = Data.Tickets.Where(t => !Data.SupportProviders.Any(sp => sp.TelegramID == t.Target)).ToList();
            }

            if (sup != null)
            {
                await sup.HandleMessage(sender, e);

                return;
            }

            // Otherwise its a rebel needing support
            var ticket = Data.Tickets.SingleOrDefault(t => t.IsActive && t.Target == userID);

            if (ticket == null)
            {
                ticket = new Ticket(userID);
                Data.Tickets.Add(ticket);
            }
            await ticket.HandleMessage(sender, e);
        }