public async Task StartGiveAway(GiveAwayValues inits) { inits.Timer = new ScheduleManager(); Console.WriteLine("StartingGiveaway"); if (!inits.Timer.SetUpTimer(inits.GiveAwayTime, inits.GiveAwayDateTime, new Action(() => { Task.Run(SetTimerValues); }))) { await ReplyAsync(_discordClient.CultureHelper.GetAdminString("GiveawayErrorTimer")); return; } foreach (CultureInfo culture in inits.AwardCultures) { EmbedBuilder embed = new EmbedBuilder(); embed.WithDescription(GetGiveawayMessage(culture, inits, true)); AddEndTimeField(inits, embed, culture); await inits.TargetChannel.SendMessageAsync(string.Empty, false, embed.Build()); } await ReplyAsync(":tada: " + _discordClient.CultureHelper.GetAdminString("GiveawayStarted")); }
internal GiveAwayValues GetCurrentInitValues() { if (InitValues != null && Context != null) { GiveAwayValues initValues = InitValues.SingleOrDefault(x => x.ServerGuild == Context.Guild); return(initValues); } return(null); }
public string GetGiveawayMessage(CultureInfo culture, GiveAwayValues inits, bool first) { string announce = first ? _discordClient.CultureHelper.GetOutputString("GiveawayAnnounce", culture) : _discordClient.CultureHelper.GetOutputString("GiveawayAnnounceNext", culture); return(Environment.NewLine + announce + Environment.NewLine + string.Format(_discordClient.CultureHelper.GetOutputString("GiveawayAnnounceWin", culture), inits.CultureAward[culture]) + Environment.NewLine + string.Format(_discordClient.CultureHelper.GetOutputString("GiveawayAnnounceKeyword", culture), inits.Codeword) + " :tada:"); }
private async Task <bool> ShoutOutTheWinners(GiveAwayValues inits) { List <IReadOnlyCollection <IMessage> > readonlymessages = await inits.TargetChannel.GetMessagesAsync(1000).ToList(); List <IMessage> messages = readonlymessages.SelectMany(x => x).ToList(); IMessage latestBotMessage = messages.FirstOrDefault(x => x.Author.Id == Context.Client.CurrentUser.Id); List <IMessage> latestMessages; if (latestBotMessage != null) { latestMessages = new List <IMessage>(); int index = messages.IndexOf(latestBotMessage); for (int i = 0; i < index; i++) { latestMessages.Add(messages[i]); } } else { latestMessages = messages; } List <IUser> users = latestMessages.Where(m => m.Content.ToLower().Contains(inits.Codeword.ToLower())) .Select(y => y.Author).Distinct().Where(x => !x.IsBot).ToList(); List <IUser> winners = GetWinners(1, users); foreach (CultureInfo culture in inits.AwardCultures) { string message = _discordClient.CultureHelper.GetOutputString("GiveawayWinner", culture) + Environment.NewLine + Environment.NewLine; foreach (IUser winner in winners) { message += $":trophy: {winner.Mention} :trophy:" + Environment.NewLine + Environment.NewLine + winner.Username + _discordClient.CultureHelper.GetOutputString("GiveawayWinnerPrize", culture) + "**" + inits.CultureAward[culture] + "**" + Environment.NewLine; } message += _discordClient.CultureHelper.GetOutputString("GiveawayCongrats", culture) + Environment.NewLine + Environment.NewLine; await inits.TargetChannel.SendMessageAsync(message); } await ReplyAsync(_discordClient.CultureHelper.GetAdminString("GiveawayWinnerAnnounced")); inits.CountGiveAways--; if (inits.CountGiveAways == 0) { StopGiveawayInternal(); return(false); } return(true); }
private bool StopGiveawayInternal() { GiveAwayValues inits = GetCurrentInitValues(); if (inits != null) { inits.Reset(); (inits.Owner as GiveAway)?.UnhandleMessageReceive(); InitValues.Remove(inits); return(true); } return(false); }
private async Task Client_MessageReceived(Discord.WebSocket.SocketMessage arg) { GiveAwayValues inits = GetCurrentInitValues(); if (inits != null) { if (arg is SocketUserMessage userMessage && !userMessage.Author.IsBot && userMessage.Channel == inits.SourceChannel && userMessage.Author == inits.AdminUser && !userMessage.Content.ToLower().Equals("%cancel")) { string message = null; switch (inits.State) { case GiveAwayState.SetGiveAwayTime: message = _functions.SetGiveAwayTime(inits, userMessage.Content); await ReplyAsync(message); break; //case GiveAwayState.SetCountGiveAways: // message = _functions.SetCountGiveAways(inits, userMessage.Content); // await ReplyAsync(message); // break; case GiveAwayState.SetAwardCultures: message = _functions.SetAwardCultures(inits, userMessage.Content); await ReplyAsync(message); break; case GiveAwayState.SetCodeword: message = _functions.SetCodeword(inits, userMessage.Content); await ReplyAsync(message); break; case GiveAwayState.SetAward: message = _functions.SetAward(inits, userMessage.Content); await ReplyAsync(message); break; } } if (inits.State == GiveAwayState.Initialized) { _discordClient.Client.MessageReceived -= Client_MessageReceived; } } }
public async Task Start() { GiveAwayValues inits = GetCurrentInitValues(); if (inits != null && inits.State == GiveAwayState.Initialized) { await StartGiveAway(inits); } else { await ReplyAsync(_discordClient.CultureHelper.GetAdminString("GiveawayNotInitialized") + Environment.NewLine + _discordClient.CultureHelper.GetAdminString("GiveawayEnterChannelTip")); } }
private void AddEndTimeField(GiveAwayValues inits, EmbedBuilder embed, CultureInfo culture) { if (inits.GiveAwayTime != null) { DateTime dt = new DateTime(1999, 1, 1, inits.GiveAwayTime.Value.Hours, inits.GiveAwayTime.Value.Minutes, 0); string time = dt.ToString("t", culture); embed.AddField(string.Format(_discordClient.CultureHelper.GetOutputString("GiveawayParticipEndTime", culture), time), _discordClient.CultureHelper.GetOutputString("GoodLuck", culture)); } else if (inits.GiveAwayDateTime != null) { DateTime dt = inits.GiveAwayDateTime.Value; string date = dt.ToString("g", culture); embed.AddField(string.Format(_discordClient.CultureHelper.GetOutputString("GiveawayParticipEndDate", culture), date), _discordClient.CultureHelper.GetOutputString("GoodLuck", culture)); } }
private async Task SetTimerValues() { GiveAwayValues inits = GetCurrentInitValues(); if (inits != null) { if (await ShoutOutTheWinners(inits)) { try { // Wait one Minute to avoid problems with timespan Thread.Sleep(60000); foreach (CultureInfo culture in _discordClient.CultureHelper.OutputCultures) { EmbedBuilder embed = new EmbedBuilder(); embed.WithDescription(GetGiveawayMessage(culture, inits, false)); AddEndTimeField(inits, embed, culture); await inits.TargetChannel.SendMessageAsync(string.Empty, false, embed.Build()); } inits.Timer = new ScheduleManager(); if (inits.GiveAwayDateTime != null) { inits.GiveAwayDateTime = inits.GiveAwayDateTime.Value.AddDays(1); } inits.Timer.SetUpTimer(inits.GiveAwayTime, inits.GiveAwayDateTime, new Action(() => { Task.Run(SetTimerValues); })); } catch (Exception ex) { await ReplyAsync(_discordClient.CultureHelper.GetAdminString("GiveawayErrorRepeat") + ex.Message); } } } }
public async Task InitGiveAway(IMessageChannel channel) { StopGiveawayInternal(); string message = _discordClient.CultureHelper.GetAdminString("GiveawayStartNew") + Environment.NewLine + _discordClient.CultureHelper.GetAdminString("GiveawayTypeCancel") + Environment.NewLine + _discordClient.CultureHelper.GetAdminString("GiveawayEnterTime") + Environment.NewLine + _discordClient.CultureHelper.GetAdminString("GiveawayTimeExample"); GiveAwayValues values = new GiveAwayValues(); values.Owner = this; values.ServerGuild = Context.Guild; values.TargetChannel = channel; values.SourceChannel = Context.Channel; values.AdminUser = Context.User; values.State = GiveAwayState.SetGiveAwayTime; values.CountGiveAways = 1; InitValues.Add(values); _discordClient.Client.MessageReceived -= Client_MessageReceived; _discordClient.Client.MessageReceived += Client_MessageReceived; await ReplyAsync(message, false, null); }
public async Task AnnounceWinner() { GiveAwayValues inits = GetCurrentInitValues(); await ShoutOutTheWinners(inits); }