public async Task ListAllMutes(CommandParameters parameters) { var mutes = Android.Moderation.MutesByUser; if (mutes.Count == 0) { await parameters.Reply("nobody is muted (excluding manual mutes)"); return; } var now = DateTime.UtcNow; string toSend = "at the time of this message...\n"; foreach (var item in mutes.OrderBy(i => i.Value.Expiration.Ticks)) { var user = Android.Client.GetUser(item.Key); if (user == null) { continue; } toSend += $"{user.Username}#{user.Discriminator} is muted for {Utilities.TimeSpanToText(item.Value.Expiration - now)}\n"; } await parameters.Reply(toSend); }
private async Task SetChannelBan(CommandParameters parameters, bool ban) { var channels = await Android.Guild.GetChannelsAsync(); var users = parameters.SocketMessage.MentionedUsers; var mentionedChannels = parameters.SocketMessage.MentionedChannels; var guild = await Android.Client.Rest.GetGuildAsync(Android.GuildID); foreach (var channel in mentionedChannels) { foreach (var user in users) { var guildUser = await guild.GetUserAsync(user.Id); var result = await Android.Moderation.SetChannelBan(channel, guildUser, ban, channels); if (!result) { await parameters.Reply($"could not find an appropriate muting role for <#{channel.Id}>"); } else { await parameters.Reply($"{user.Username} has been {(ban ? "banned" : "unbanned")} from <#{channel.Id}>"); } } } }
public async Task Mute(CommandParameters parameters) { var users = parameters.SocketMessage.MentionedUsers; var channel = parameters.SocketMessage.Channel; if (users == null || users.Count == 0) { await parameters.Reply("no users specified"); return; } var parsedDuration = Utilities.ParseTimeFromText(parameters.ContentWithoutTriggerAndCommand); var duration = parsedDuration ?? TimeSpan.FromMinutes(DefaultMuteDurationInMinutes); if (!parsedDuration.HasValue) { await parameters.Reply("no duration specified, falling back to " + DefaultMuteDurationInMinutes + " minutes"); } var guild = await Android.Client.Rest.GetGuildAsync(Android.GuildID); foreach (var user in users) { var gU = await guild.GetUserAsync(user.Id); await Android.Moderation.Mute(gU, channel as ITextChannel, duration); } }
public async Task Say(CommandParameters parameters) { var message = parameters.ContentWithoutTriggerAndCommand; bool specifiesChannel = message.EndsWith(">"); ulong channelId = parameters.SocketMessage.Channel.Id; if (specifiesChannel) { Regex regex = new Regex(@"(in <#\d+>)"); var matches = regex.Matches(message.ToLower()); if (matches.Count != 0) { var match = matches.Last(); bool successfulParse = ulong.TryParse(new string(match.Value.Where(c => char.IsDigit(c)).ToArray()), out channelId); if (!successfulParse) { await parameters.Reply("something went wrong"); } else { message = message.Substring(0, message.Length - match.Length); } } } var channel = parameters.Instance.Client.GetChannel(channelId); if (channel is SocketTextChannel tc) { await tc.SendMessageAsync(message); } }
private async Task SetInterrogationStatus(CommandParameters parameters, bool state) { var users = parameters.SocketMessage.MentionedUsers; var role = Android.Guild.GetRole(interrogationRole); var guild = await Android.Client.Rest.GetGuildAsync(Android.GuildID); if (role == null) { await parameters.Reply("no interrogation role set... should probably tell an admin"); return; } foreach (var item in users) { var gu = await guild.GetUserAsync(item.Id); if (state) { await gu.AddRoleAsync(role); } else { await gu.RemoveRoleAsync(role); } } if (state) { string reply; const string suffix = " ready for interrogation"; if (users.Count > 1) { reply = string.Join(", ", users.Select(u => u.Username)) + " are" + suffix; } else { reply = users.First().Username + " is" + suffix; } await parameters.Reply(reply); } else { await parameters.Reply("come back soon!"); } }
public async Task Ping(CommandParameters p) { var now = DateTime.UtcNow; var time = p.SocketMessage.Timestamp.UtcDateTime; var delay = now - time; await p.Reply($"pong! {Math.Round(delay.TotalMilliseconds, 3)} ms"); }
public async Task Maths(CommandParameters parameters) { try { var result = Parser.Parse(parameters.ContentWithoutTriggerAndCommand.ToLower()); var safeReply = Utilities.ReplaceMentions(parameters.ContentWithoutTriggerAndCommand); await parameters.Reply($"{safeReply} = {result.ToString(CultureInfo.InvariantCulture)}"); } catch (InfinityException) { await parameters.Reply("infinity"); } catch (NaNException) { await parameters.Reply("the result was not a number"); } catch (Exception) { await parameters.Reply("i don't understand the expression"); } }
public async Task GreetingResponse(CommandParameters parameters) { var responses = new[] { "hi", ":)", "hello", "o/", "o//", "hi :)" }; var i = rand.Next(0, responses.Length); await parameters.Reply(responses[i]); }
public async Task ArchiveChannel(CommandParameters parameters) { const int MaxMessageCount = 10000; var channels = parameters.SocketMessage.MentionedChannels; if (channels == null || channels.Count == 0) { var a = new List <SocketGuildChannel>() { parameters.SocketMessage.Channel as SocketGuildChannel }; channels = a.AsReadOnly(); } var now = DateTime.UtcNow; await parameters.Reply("working on it..."); var isTyping = parameters.SocketMessage.Channel.EnterTypingState(); foreach (var item in channels) { if (item is not ITextChannel tc) { continue; } string file = string.Empty; var messages = tc.GetMessagesAsync(MaxMessageCount, CacheMode.AllowDownload); await messages.ForEachAwaitAsync(m => { foreach (var item in m) { file = file.Insert(0, $"{item.Author} ({item.Timestamp.UtcDateTime})\n\t{item.Content}\n\n"); } return(Task.CompletedTask); }); file = file.Insert(0, $"#{item.Name} at {now}\nBiscuit can only archive the last {MaxMessageCount} messages\n\n"); await Utilities.SendTextAsFile(parameters.SocketMessage.Channel, file, $"{item.Name}.txt"); } isTyping.Dispose(); }
public async Task Unmute(CommandParameters parameters) { var users = parameters.SocketMessage.MentionedUsers; var guild = await Android.Client.Rest.GetGuildAsync(Android.GuildID); if (users == null || users.Count == 0) { await parameters.Reply("no users specified"); return; } foreach (var user in users) { var gU = await guild.GetUserAsync(user.Id); await Android.Moderation.Unmute(gU); } }
public async Task Lego(CommandParameters parameters) { await parameters.Reply("https://i.imgur.com/YsUVChu.png"); }
public async Task DissmissingResponse(CommandParameters parameters) { await parameters.Reply("ok"); }