public async Task <Message> Post(FormDataCollection collection) { Input.SaveFormParams(collection, nameof(VotebanController)); var parameters = collection.ReadAs <CommandParameters>(); var voteban = await Voteban.Create(parameters); voteban.Save(); var vote = new Vote(voteban, voteban.GetAuthor(), true); vote.Save(); var message = FormatMessage(voteban); return(message); }
internal static Message FormatMessage(Voteban voteban) { var votes = Repository.Get <Vote>().Where(v => v.Voteban.Id == voteban.Id).ToList(); var ban = votes.Count(v => v.NeedBan); var none = votes.Count(v => !v.NeedBan); // Если голосуем поздно - то делаем пока-пока. if (voteban.IsTimeOut()) { var message = new Message(); var quest = new Attachment(); quest.Text = "Time for vote out"; quest.Callback = voteban.Callback; quest.Fallback = "Voteban fallback"; message.Attachments.Add(quest); return(message); } // Пытаемся определить, голосуем или баним. if (ban < 3 || ban <= none) { var message = new Message(); var quest = new Attachment(); quest.Text = string.Format("Vote to ban {0}. \r\n {1} already voted. \r\n Votes: {2} / {3}", voteban.User, string.Join(", ", votes.Select(v => v.User)), ban, none); quest.Callback = voteban.Callback; quest.Color = "warning"; quest.Fallback = "Voteban fallback"; quest.Actions.Add(new Button() { Text = "Ban", Name = Vote.Ban, Value = Vote.Ban, Style = "danger" }); quest.Actions.Add(new Button() { Text = "Not ban", Name = Vote.None, Value = Vote.None }); message.Attachments.Add(quest); return(message); } else { #warning Тут наверно лучше слать новое сообщение. voteban.Banned = true; voteban.Save(); var message = new Message(); var quest = new Attachment(); quest.Callback = voteban.Callback; quest.Color = "danger"; quest.Fallback = "Voteban fallback"; message.Attachments.Add(quest); var client = WebApiConfig.Clients.Find(c => c.TeamId == voteban.TeamId); if (client != null) { client.Kick(voteban.ChannelId, voteban.UserId); quest.Text = string.Format("User {0} has been banned.", voteban.User); } else { quest.Text = string.Format("User {0} has been banned. \r\n {0}, leave channel, pls =)", voteban.User); } return(message); } }
public override bool CanHandleMessage(BotClient client, NewMessage message) { var bannedUsers = Voteban.GetBannedUsers(client.TeamId, message.channel).Select(u => u.Id); return(bannedUsers.Contains(message.user)); }