private async Task Client_JoinedGuild(SocketGuild arg) { Console.WriteLine($"{DateTime.Now} -> Joined guild: {arg.Id}"); GuildOption go = new GuildOption(); Options o = new Options(); go.GuildID = arg.Id; go.GuildName = arg.Name; go.OwnerID = arg.Owner.Id; go.Prefix = "]"; o.LogChannelID = 0; o.LogEmbeds = false; o.LogAttachments = false; go.Options = o; if (!GlobalVars.GuildOptions.Any(x => x.GuildID == go.GuildID)) { GlobalVars.GuildOptions.Add(go); } DBControl.UpdateDB($"INSERT INTO Guilds (GuildID,GuildName,OwnerID,Prefix,LogChannelID,LogEmbeds,LogAttachments) VALUES ({go.GuildID.ToString()}, '{go.GuildName.Replace(@"'","")}',{go.OwnerID.ToString()},'{go.Prefix}',{go.Options.LogChannelID.ToString()}, {(go.Options.LogEmbeds ? 1:0)}, {(go.Options.LogAttachments ? 1:0)});"); await UpdateActivity(); await Task.Delay(100); }
public async Task SetPrefix(CommandContext ctx, string prefix) { // allow admins or bot owners to change the prefix if (ctx.Member.PermissionsIn(ctx.Channel).HasPermission(Permissions.Administrator) || Bot.BotOwnerIds.Contains(ctx.User.Id)) { if (Bot.GuildOptions == null) { await ctx.RespondAsync("[ERROR] Bot.Prefixes is Empty; Contact an administrator with this error."); return; } if (!string.IsNullOrEmpty(prefix)) { var guild = Bot.GuildOptions.Find(x => x.Id == ctx.Guild.Id); if (guild == null) { guild = new GuildOption { Id = ctx.Guild.Id }; } guild.Prefix = prefix; DB.Upsert(GuildOption.DBName, GuildOption.TableName, guild); Bot.UpdateGuildOptions(); } await ctx.RespondAsync($"New prefix is now `{Bot.GetPrefix(ctx.Guild)}` 👌"); } else { await ctx.RespondAsync("Please contact an administrator to change the prefix for this guild"); } }
public async Task SetChannel(CommandContext ctx, DiscordChannel channel = null) { if (ctx.Member.PermissionsIn(ctx.Channel).HasPermission(Permissions.Administrator) || Bot.BotOwnerIds.Contains(ctx.User.Id)) { if (channel == null) { channel = ctx.Channel; } if (channel.Type == DSharpPlus.ChannelType.Text) { var member = await ctx.Guild.GetMemberAsync(ctx.Client.CurrentUser.Id); //TODO BROKEN, WAIT FOR DSHARPPLUS TO FIX THIS GARBAGE var perm = channel.PermissionsFor(member); var requiredPermissions = new Permissions[] { Permissions.ReadMessageHistory, Permissions.SendMessages, Permissions.AddReactions, Permissions.UseExternalEmojis, Permissions.EmbedLinks, Permissions.AccessChannels, }; foreach (var p in requiredPermissions) { if (!perm.HasPermission(p)) { await ctx.RespondAsync($"I'm missing some permissions to work there! I need these permissions to work properly\n{string.Join("\n", requiredPermissions.Select(x => x.ToPermissionString()))}"); return; } } var guild = Bot.GuildOptions.Find(x => x.Id == ctx.Guild.Id); if (guild == null) { guild = new GuildOption { Id = ctx.Guild.Id }; } guild.Channel = channel.Id; try { DB.Upsert(GuildOption.DBName, GuildOption.TableName, guild); Bot.UpdateGuildOptions(); await ctx.RespondAsync($"👌 New default channel is now {guild.GetChannel()}"); } catch (System.Exception ex) { Logger.Error(ex); } } else { await ctx.RespondAsync("Seems like I can't post messages, or add reactions in that channel!"); return; } } else { await ctx.RespondAsync("This command can only be used by server admins."); } }
private async Task OnGuildAvailable(GuildCreateEventArgs e) { if (e.Guild.Id == Options.Guild) { Logger.Info("Found options.Guild"); var channels = await e.Guild.GetChannelsAsync(); foreach (var channel in channels) { if (ImageCache != null && ModerationChannel != null) { break; } if (channel.Id == Options.ModerationChannel) { Logger.Info("Found moderation channel"); ModerationChannel = channel; var moderationTarget = new DiscordChannelTarget(ModerationChannel); NLog.LogManager.Configuration.AddRule(NLog.LogLevel.Info, NLog.LogLevel.Fatal, moderationTarget); } if (channel.Id == Options.CacheChannel) { Logger.Info("Found cache channel"); ImageCache = channel; } } } if (!GuildOptions.Any(x => x.Id == e.Guild.Id)) { var options = new GuildOption { Id = e.Guild.Id, Channel = e.Guild.GetDefaultChannel().Id }; DB.Insert(GuildOption.DBName, GuildOption.TableName, options); LoadGuildOptions(); } Logger.Info("OnGuildAvailable {0}", e.Guild.Name); await Task.Delay(1); }
private void GetSQLData() { //Load prefix & options from DB SqlConnectionStringBuilder sBuilder = new SqlConnectionStringBuilder(); sBuilder.InitialCatalog = GlobalVars.dbSettings.db; sBuilder.UserID = GlobalVars.dbSettings.username; sBuilder.Password = GlobalVars.dbSettings.password; sBuilder.DataSource = GlobalVars.dbSettings.host + @"\" + GlobalVars.dbSettings.instance + "," + GlobalVars.dbSettings.port; SqlConnection conn = new SqlConnection(); conn.ConnectionString = sBuilder.ConnectionString; using (conn) { conn.Open(); #region Get Guilds SqlCommand cmd = new SqlCommand($"SELECT * FROM SBGuilds", conn); SqlDataReader dr = cmd.ExecuteReader(); while (dr.Read()) { GuildOption go = new GuildOption(); go.GuildID = Convert.ToUInt64(dr.GetValue(0)); go.GuildName = Convert.ToString(dr.GetValue(1)); go.OwnerID = Convert.ToUInt64(dr.GetValue(2)); go.Prefix = Convert.ToString(dr.GetValue(3)); go.PunishThreshold = Convert.ToUInt16(dr.GetValue(4)); go.MaxReserves = Convert.ToUInt16(dr.GetValue(5)); GlobalVars.GuildOptions.Add(go); } #endregion conn.Close(); conn.Dispose(); } }
public async Task SetRole(CommandContext ctx, DiscordRole role) { // allow admins or bot owners to change the prefix if (ctx.Member.PermissionsIn(ctx.Channel).HasPermission(Permissions.Administrator) || Bot.BotOwnerIds.Contains(ctx.User.Id)) { if (Bot.GuildOptions == null) { await ctx.RespondAsync("[ERROR] Bot.Prefixes is Empty; Contact an administrator with this error."); return; } if (role != null) { if (!role.IsMentionable) { await ctx.RespondAsync($"@{role.Name} isn't mentionable. Please make sure I can mention the role."); return; } var guild = Bot.GuildOptions.Find(x => x.Id == ctx.Guild.Id); if (guild == null) { guild = new GuildOption { Id = ctx.Guild.Id }; } guild.RoleId = role.Id; DB.Upsert(GuildOption.DBName, GuildOption.TableName, guild); Bot.UpdateGuildOptions(); await ctx.RespondAsync($"New role is now @{role.Name} 👌\nMake sure the bot can ping this role."); } else { await ctx.RespondAsync($"Removed role 👌"); } } }
private async Task Client_JoinedGuild(SocketGuild arg) { if (Constants._IGNOREDGUILDS_.Contains(arg.Id)) { return; } Console.WriteLine($"{DateTime.Now} -> Joined guild: {arg.Id}"); GuildOption go = new GuildOption(); go.GuildID = arg.Id; go.GuildName = arg.Name; go.OwnerID = arg.Owner.Id; go.Prefix = "]"; go.PunishThreshold = 0; go.MaxReserves = 1; GlobalVars.GuildOptions.Add(go); DBControl.UpdateDB($"INSERT INTO SBGuilds VALUES ({go.GuildID.ToString()}, '{go.GuildName.Replace(@"'", "_")}',{go.OwnerID.ToString()},'{go.Prefix}', {go.PunishThreshold}, {go.MaxReserves})"); await UpdateActivity(); await Task.Delay(100); }
private async Task GetSQLData() { if (hasLoaded) { return; } //Load prefix & options from DB SqlConnectionStringBuilder sBuilder = new SqlConnectionStringBuilder(); sBuilder.InitialCatalog = dbSettings.db; sBuilder.UserID = dbSettings.username; sBuilder.Password = dbSettings.password; sBuilder.DataSource = dbSettings.host + @"\" + dbSettings.instance + "," + dbSettings.port; sBuilder.ConnectTimeout = 30; sBuilder.IntegratedSecurity = false; SqlConnection conn = new SqlConnection(); conn.ConnectionString = sBuilder.ConnectionString; using (conn) { conn.Open(); #region Get Guilds SqlCommand cmd = new SqlCommand($"SELECT * FROM Guilds", conn); SqlDataReader dr = cmd.ExecuteReader(); while (dr.Read()) { GuildOption go = new GuildOption(); Options o = new Options(); go.GuildID = Convert.ToUInt64(dr.GetValue(0)); go.GuildName = Convert.ToString(dr.GetValue(1)); go.OwnerID = Convert.ToUInt64(dr.GetValue(2)); go.Prefix = Convert.ToString(dr.GetValue(3)); o.LogChannelID = Convert.ToUInt64(dr.GetValue(4)); o.LogEmbeds = Convert.ToBoolean(dr.GetValue(5)); o.LogAttachments = Convert.ToBoolean(dr.GetValue(6)); go.Options = o; if (!GlobalVars.GuildOptions.Any(x => x.GuildID == go.GuildID)) { GlobalVars.GuildOptions.Add(go); } } dr.Close(); #endregion #region Get Friends cmd.CommandText = $"SELECT UserID FROM Friends"; dr = cmd.ExecuteReader(); while (dr.Read()) { var id = Convert.ToUInt64(dr.GetValue(0)); var user = await CustomUserTypereader.GetUserFromID(id, Client.Guilds); if (!GlobalVars.FriendUsers.ContainsKey(id)) { GlobalVars.FriendUsers.Add(id, user); } } dr.Close(); #endregion #region Get Idiots cmd.CommandText = $"SELECT UserID FROM Ignores"; dr = cmd.ExecuteReader(); while (dr.Read()) { var id = Convert.ToUInt64(dr.GetValue(0)); var user = await Classes.Commands.CustomUserTypereader.GetUserFromID(id, Client.Guilds); if (!GlobalVars.IgnoredUsers.ContainsKey(id)) { GlobalVars.IgnoredUsers.Add(id, user); } } dr.Close(); #endregion #region Get Emotes cmd.CommandText = $"SELECT * FROM Emotes"; dr = cmd.ExecuteReader(); while (dr.Read()) { ApprovedEmote ae = new ApprovedEmote(dr.GetValue(0).ToString(), dr.GetValue(3).ToString(), dr.GetValue(2).ToString(), Convert.ToBoolean(dr.GetValue(4)), dr.GetValue(5).ToString(), Convert.ToBoolean(dr.GetValue(6))); if (!GlobalVars.EmoteList.ContainsKey(ae.EmoteID)) { GlobalVars.EmoteList.Add(ae.EmoteID, ae); } } dr.Close(); #endregion #region Get Bot Owners cmd.CommandText = $"SELECT * FROM BotOwners"; dr = cmd.ExecuteReader(); List <ulong> ownerList = new List <ulong>(); while (dr.Read()) { ownerList.Add(Convert.ToUInt64(dr.GetValue(1))); } Constants._BOTOWNERS_ = ownerList.ToArray(); dr.Close(); #endregion #region Get Morty Users cmd.CommandText = $"SELECT * FROM mortyUsers"; dr = cmd.ExecuteReader(); List <ulong> mortyUsers = new List <ulong>(); while (dr.Read()) { mortyUsers.Add(Convert.ToUInt64(dr.GetValue(1))); } GlobalVars.RegisteredMortyUsers = mortyUsers; GlobalVars.MortyTimeouts = new Dictionary <ulong, bool>(); GlobalVars.MortyLastUse = new Dictionary <ulong, DateTime>(); foreach (ulong u in GlobalVars.RegisteredMortyUsers) { GlobalVars.MortyTimeouts.Add(u, false); GlobalVars.MortyLastUse.Add(u, DateTime.MinValue); } dr.Close(); #endregion #region Get Timers cmd.CommandText = $"SELECT UserID, GuildID, ChannelID, TimerType, TriggerTime, TimerMessage, TimerID FROM Timers"; dr = cmd.ExecuteReader(); List <TimerObj> timerList = new List <TimerObj>(); while (dr.Read()) { var o = new TimerObj { UserID = ulong.Parse(dr.GetValue(0).ToString()), GuildID = ulong.Parse(dr.GetValue(1).ToString()), ChannelID = ulong.Parse(dr.GetValue(2).ToString()), TimerType = dr.GetValue(3).ToString(), TriggerTime = dr.GetValue(4).ToString(), TimerMsg = dr.GetValue(5).ToString(), TimerID = int.Parse(dr.GetValue(6).ToString()) }; timerList.Add(o); } foreach (var o in timerList) { if (o.TimerType == "remind") { Reminders r = new Reminders(); int time = 0; List <string> timeParts = o.TriggerTime.Split('-').ToList(); timeParts.RemoveAll(s => s == "-"); int[] intTP = new int[7]; for (int i = 0; i < 7; i++) { intTP[i] = int.Parse(timeParts[i]); } DateTime dt = new DateTime(intTP[0], intTP[1], intTP[2], intTP[3], intTP[4], intTP[5], intTP[6]); time = Convert.ToInt32(dt.Subtract(DateTime.Now).TotalMilliseconds); if (time >= 0) { var t = Convert.ToUInt64(time); var txtChan = Client.GetGuild(o.GuildID).GetTextChannel(o.ChannelID); var u = Client.GetGuild(o.GuildID).GetUser(o.UserID); var msg = o.TimerMsg.Replace("§²", "'").Replace("§³", ";"); r.TimerStart(t, txtChan, u, msg); } else { string sql = $"DELETE FROM Timers WHERE TimerID = {o.TimerID}"; DBControl.UpdateDB(sql); } } } dr.Close(); #endregion conn.Close(); conn.Dispose(); } }