private Task Client_GuildMemberAdded(DiscordClient sender, GuildMemberAddEventArgs e) { DiscordMember miembro = e.Member; modlog.SendMessageAsync(HelperMethods.QuickEmbed($"New Member: {miembro.Username}#{miembro.Discriminator}", $"Discord ID: {miembro.Id}\n" + $"Fecha de creacion de cuenta: {miembro.CreationTimestamp}", false )); return(Task.CompletedTask); }
public async Task GetHours(CommandContext ctx) { String userid = ctx.User.Id.ToString(); TimeSpan horas = DBInterface.Instance.GetTotalHoursByID(userid); Study_WorkSheet[] hours = DBInterface.Instance.GetRegsbyID(userid); int maxregs = hours.Length > 5 ? 5 : hours.Length; string des = $"Last {maxregs}\n"; for (int i = 0; i < maxregs; i++) { des += $"{i + 1} - {hours[i].Subject} - {hours[i].TotalTime}\n"; } await ctx.RespondAsync( HelperMethods.QuickEmbed(ctx.Member.DisplayName + " Has " + horas.ToString() + " Hours", des, false) ); }
public async Task Addhours(CommandContext ctx, string hours) { String UserID = ctx.User.Id.ToString(); TryAddMember(ctx.Member); DateTime StartTime = DateTime.Now.Date; TimeSpan tiempo = hours.Contains(":") ? TimeSpan.Parse(hours) : TimeSpan.FromHours(int.Parse(hours)); int daystosubstract = tiempo.Days; StartTime = StartTime.Subtract(TimeSpan.FromDays(tiempo.Days)); DateTime EndTime = StartTime.AddHours(tiempo.TotalHours); DBInterface.Instance.AddTime(UserID, "Unspecified", StartTime, EndTime); await ctx.RespondAsync( HelperMethods.QuickEmbed($"Added {tiempo} hours to the Study Tracker", $"No Subject Provided", false) ); }
private async Task <Task> Client_MessageCreated(DiscordClient sender, MessageCreateEventArgs e) { if (e.Author.IsBot || e.Author.IsCurrent) { return(Task.CompletedTask); } //Esto es horrible pero bueno string mensaje = e.Message.Content.ToLower(); if (mensaje.StartsWith("-wote") || mensaje.StartsWith("wote") || e.Message.ChannelId == suggestions.Id || e.Message.ChannelId == adminSuggestions.Id) { await WoteAsync(e.Message, true); } if (e.Channel == introductions) { DiscordMember member = (DiscordMember)e.Author; bool hasroles = checkroles(member); if (!hasroles) { await member.SendMessageAsync(EasyDualLanguageFormatting( "Nos hemos dado cuenta que no tienes los roles de nativo, puedes obtenerlos en #roles.\n" + "**Necesitas un rol de nativo para interactuar en el servidor.**\n" + "Si tienes algun problema puedes preguntar a algun miembro del staff.", "We've noticed that you don't have any native roles, you can grab them in #roles.\n" + "**You need a native role to interact on the server.**\n" + "If You're having trouble feel free to ask anyone from the staff team.")); } bool checkroles(DiscordMember member) { return(member.Roles.Where( role => role == EnglishNative || role == SpanishNative || role == OtherNative ).Any()); } } if (!mensaje.StartsWith("-")) { return(Task.CompletedTask); //OPTIMIZAAAAAAR } string[] content = mensaje.Trim().Split(' '); bool isAdmin = IsAdmin(e.Author); if (mensaje.StartsWith("-roles")) { await e.Channel.SendMessageAsync( $"{DiscordEmoji.FromName(Client, ":flag_es:")} Por favor ponte los roles adecuados en {roles.Mention} ¡No te olvides el rol de nativo!\n" + $"{DiscordEmoji.FromName(Client, ":flag_gb:")} Please set up your roles in {roles.Mention} Don't forget the native role!" ); return(Task.CompletedTask); } if (mensaje.StartsWith("-ping")) { await e.Message.RespondAsync("Pong! " + Client.Ping + "ms"); return(Task.CompletedTask); } if (mensaje.StartsWith("-help")) { DiscordMember member = (DiscordMember)e.Author; await member.SendMessageAsync(GenerateHelp(member)); e.Message.CreateReactionAsync(DiscordEmoji.FromName(Client, ":white_check_mark:")); return(Task.CompletedTask); } if (mensaje.StartsWith("-sendwotd") && isAdmin) { bool confirmacion = await VerificarAsync(e.Channel, e.Author, 15); if (confirmacion) { await SendWOTDAsync(); e.Message.CreateReactionAsync(DiscordEmoji.FromName(Client, ":white_check_mark:")); } return(Task.CompletedTask); } if (mensaje.StartsWith("-version")) { await e.Channel.SendMessageAsync(GetVersionEmbed()); return(Task.CompletedTask); } if (mensaje.StartsWith("-checkusers") && isAdmin) { _ = Task.Run(async() => { IEnumerable <DiscordMember> members = await languageServer.GetAllMembersAsync(); int i = 0; int max = members.Count(); DiscordMessage msg = await e.Channel.SendMessageAsync( HelperMethods.QuickEmbed($"Checking Users... This is going to take a while", $"{i}/{max}\n{HelperMethods.GenerateProgressBar(0)}")); DateTime lastEdit = DateTime.Now; foreach (DiscordMember member in members) { if (CheckUser(member)) { HelperMethods.Delay(100); } else { HelperMethods.Delay(50); } i++; if (DateTime.Now - lastEdit > TimeSpan.FromSeconds(8)) { lastEdit = DateTime.Now; msg.ModifyAsync(null, HelperMethods.QuickEmbed($"Checking Users...{i}/{max}", HelperMethods.GenerateProgressBar(((double)i / max)))); } } msg.ModifyAsync(null, HelperMethods.QuickEmbed("All users have been checked")); }); return(Task.CompletedTask); } if (mensaje.StartsWith("-isblocked") && isAdmin) { DiscordMember senderMember = (DiscordMember)e.Author; string nickname = ""; try { ulong userid = ulong.Parse(mensaje.Substring(10)); DiscordUser objUser = await Client.GetUserAsync(userid); DiscordMember objMember = await languageServer.GetMemberAsync(userid); nickname = objMember.Nickname; IReadOnlyList <DiscordMessage> mensajes = await conelBot.GetMessagesAsync(250); bool ischecked = false; foreach (DiscordMessage MensajeLocal in mensajes) { if (MensajeLocal.Author == objMember && !ischecked) { ischecked = true; await MensajeLocal.CreateReactionAsync(DiscordEmoji.FromName(Client, ":thinking:")); HelperMethods.Delay(); await MensajeLocal.DeleteOwnReactionAsync(DiscordEmoji.FromName(Client, ":thinking:")); await senderMember.SendMessageAsync($"El usuario {nickname} **No** ha bloqueado al bot"); } } } catch (Exception ex) { if (ex is ArgumentNullException || ex is FormatException || ex is OverflowException) { await senderMember.SendMessageAsync("Excepcion no controlada. Es posible que no hayas puesto bien el ID"); } if (ex.Message == "Unauthorized: 403") { await senderMember.SendMessageAsync($"El usuario {nickname} ha bloqueado al bot"); } } return(Task.CompletedTask); } if (mensaje.StartsWith("-gimmiadmin") && e.Author == yoshi) { //await e.Message.DeleteAsync(); DiscordMember member = (DiscordMember)e.Author; await member.GrantRoleAsync(admin); await member.SendMessageAsync("Admin == true"); return(Task.CompletedTask); } if (mensaje.StartsWith("-dletadmin") && e.Author == yoshi) { await e.Message.DeleteAsync(); DiscordMember member = (DiscordMember)e.Author; await member.SendMessageAsync("Admin == false"); await member.RevokeRoleAsync(admin); return(Task.CompletedTask); } if (mensaje.StartsWith("-restart") && isAdmin) { bool confirmacion = await VerificarAsync(e.Channel, e.Author, 15); if (confirmacion) { e.Message.CreateReactionAsync(DiscordEmoji.FromName(Client, ":white_check_mark:")); HelperMethods.Delay(1500); Environment.Exit(0); } else { await e.Message.DeleteAsync(); } } if (mensaje.StartsWith("-embed") && isAdmin) { String message = e.Message.Content.Substring(6); DiscordMember member = (DiscordMember)e.Author; bool hasfile = e.Message.Attachments.Count > 0; bool isfilenamevaild = false; String filecontent = ""; if (hasfile) { DiscordAttachment file = e.Message.Attachments[0]; isfilenamevaild = file.FileName.Equals("message.txt"); string FileName = DateTime.Now.Ticks.ToString("X16") + @".txt"; //https://stackoverflow.com/questions/7874111/convert-datetime-now-to-a-valid-windows-filename => I hate the world using (WebClient client = new WebClient()) { client.DownloadFile(file.Url, FileName); } filecontent = File.ReadAllText(FileName); File.Delete(FileName); } HelperMethods.Delay(350); await e.Message.DeleteAsync(); try { if (!hasfile) { await e.Channel.SendMessageAsync(HelperMethods.QuickEmbed($"Embed de {member.Nickname ?? member.DisplayName: member.Nickname}", message, false)); } else if (hasfile && isfilenamevaild) { await e.Channel.SendMessageAsync(HelperMethods.QuickEmbed($"Embed de {member.Nickname ?? member.DisplayName: member.Nickname}", filecontent, false)); } } catch (Exception ex) { await botupdates.SendMessageAsync(new DiscordMessageBuilder() .WithContent("Excepcion con un Embed") .WithEmbed(GenerateErrorEmbed(ex)) ); DiscordMessage errorembed = await e.Channel.SendMessageAsync(HelperMethods.QuickEmbed(":warning: Error :warning:", EasyDualLanguageFormatting("Mensaje demasiado largo o contiene caracteres no validos", "Message too large or has invalid characters"), false, "#FF0000")); HelperMethods.Delay(5000); await errorembed.DeleteAsync(); } return(Task.CompletedTask); } if (mensaje.StartsWith("-https://cdn.discordapp.com/attachments/479257969427611649/803398998710681690/b.png") && isAdmin) { String[] imageformats = { "png", "jpg", "gif", "WebP" }; if (content.Length >= 2 && Uri.IsWellFormedUriString(content[1], UriKind.Absolute) && imageformats.Contains(content[1].Split('.').Last().Substring(0, 3))) { using (WebClient wc = new WebClient()) { string currentformat = content[1].Split('.').Last().Substring(0, 3); string filepath = DateTime.Now.Ticks.ToString("X16") + "." + currentformat; wc.DownloadFile(content[1], filepath); DiscordGuildEmoji guildEmoji = await e.Guild.CreateEmojiAsync(content[2], File.OpenRead(filepath)); await e.Channel.SendMessageAsync(guildEmoji.ToString()); File.Delete(filepath); } } else { await e.Message.DeleteAsync(); await e.Channel.SendMessageAsync(HelperMethods.QuickEmbed("No se puedo añadir el emoji", "Puede que no tenga el formato correcto[png, jpg, gif, WebP]\nUso:-Addemoji<URL> < Nombre_emoji >", false, "#ff0000")); } } if (mensaje.StartsWith("-usercount") && isAdmin) { UpdateUserCountChannel(); e.Message.CreateReactionAsync(DiscordEmoji.FromName(Client, ":white_check_mark:")); } //END OF IF WALL return(Task.CompletedTask); }
public async Task Study(CommandContext ctx, [RemainingText] string subject) { //Get ID and check if exists on the DB String UserID = ctx.User.Id.ToString(); TryAddMember(ctx.Member); //Variables DateTime StartTime = DateTime.Now; InteractivityExtension interactivity = ctx.Client.GetInteractivity(); DiscordEmoji EmojiStopStudying = DiscordEmoji.FromName(ctx.Client, ":octagonal_sign:"); TimeSpan StudyTime; DateTime EndTime; //Create and send embed DiscordMessage mensaje = await ctx.Member.SendMessageAsync( HelperMethods.QuickEmbed($"Studying {subject}", $"Please click on the reaction {EmojiStopStudying} when you stop studying", false )); //sendembed //Create emoji and wait for answer await mensaje.CreateReactionAsync(EmojiStopStudying); var em = await interactivity.WaitForReactionAsync(xe => xe.Emoji.Equals(EmojiStopStudying), ctx.User, TimeSpan.FromHours(4)); if (!em.TimedOut) { //User clicks on the reaction EndTime = DateTime.Now; StudyTime = EndTime - StartTime; await mensaje.ModifyAsync("", HelperMethods.QuickEmbed($"Study Ended {subject}", $"You've studied `{subject}` for {StudyTime.Hours}:{StudyTime.Minutes}:{StudyTime.Seconds}", false, DiscordColor.Red.ToString()) ); DBInterface.Instance.AddTime(UserID, subject, StartTime, EndTime); } else { //timeout await mensaje.ModifyAsync("", HelperMethods.QuickEmbed("4 Hours Reached, React to confirm changes", "If not they will be lost.\n*Also this would be a good time to take care for youself and take a break*", false, DiscordColor.Yellow.ToString()) ); DiscordMessage mencion = await ctx.Member.SendMessageAsync(ctx.Member.Mention); //second confirm var confirm = await interactivity.WaitForReactionAsync(xe => xe.Emoji.Equals(EmojiStopStudying), ctx.User, TimeSpan.FromMinutes(5)); if (!confirm.TimedOut) { EndTime = DateTime.Now; StudyTime = EndTime - StartTime; await mensaje.ModifyAsync("", HelperMethods.QuickEmbed("Finished Studying", $"You've studied `{subject}` for {StudyTime.Hours:00}:{StudyTime.Minutes:00}", false, DiscordColor.Green.ToString()) ); DBInterface.Instance.AddTime(UserID, subject, StartTime, EndTime); await mencion.DeleteAsync(); } else { //timeout and canel await mensaje.ModifyAsync("", HelperMethods.QuickEmbed("Exceeded time limit", "No Study time has been added", false, DiscordColor.Red.ToString()) ); await mencion.DeleteAsync(); } } }