public async Task <string> GetStatus() { StringBuilder output = new StringBuilder(); IReadOnlyCollection <RestConnection> connections = await Client.GetConnectionsAsync(); foreach (RestConnection r in connections) { output.Append(string.Format("{0} {1} {2}\n", r.Id, r.Name, r.Type)); } return(output.ToString() + Client.ConnectionState.ToString()); }
public async Task RunBotAsync() { using (StreamReader fs = new StreamReader("app.json")) { App app = JsonConvert.DeserializeObject <App>(fs.ReadToEnd()); _client = new DiscordSocketClient(); _commands = new CommandService(); _pixiv = await Auth.AuthorizeAsync(app.UserName, app.Password); //依賴注入 _services = new ServiceCollection() .AddSingleton(_client) .AddSingleton(_commands) .AddSingleton(_pixiv) .BuildServiceProvider(); string token = app.DiscordToken; _client.Log += ClientLog; //註冊指令 await RegisterCommandsAsync(); //Bot登入 await _client.LoginAsync(TokenType.Bot, token); } _client.Ready += () => { var channel = _client.GetChannel(727853170545655890) as ISocketMessageChannel; var bot = _client.GetUser(727851099209596930); channel.SendMessageAsync(bot.Mention + " 已連線~:laughing:"); return(Task.CompletedTask); }; _client.Disconnected += async(ex) => { var channel = _client.GetChannel(727853170545655890) as ISocketMessageChannel; var bot = _client.GetUser(727851099209596930); await channel.SendMessageAsync(bot.Mention + " 斷線了QQ"); await _client.GetConnectionsAsync(); }; //Bot運作 await _client.StartAsync(); //阻攔程式 防止關閉 await Task.Delay(-1); }
private async Task HandleCommand(SocketCommandContext Context) { var executed = Context.Message.Content.Split(' ').ToList(); var comm = executed[0]; executed.Remove(comm); var arguments = CheckDoubleQuotes(executed); var config = Configuration.Load(); if (Context.Message.Author.Id == config.OwnerID && comm.StartsWith("$")) { switch (comm.Substring(1).ToLowerInvariant()) { case "shutdown": await DeleteMessage(Context.Message); await ClientInstance.LogoutAsync(); Environment.Exit(0); break; case "game": try { await ClientInstance.SetGameAsync(string.Join(" ", arguments)); } catch { try { await ClientInstance.SetGameAsync(string.Join(" ", arguments)); } catch { } } await DeleteMessage(Context.Message); break; } } if (HasRole(config.StaffRole, Context.Message.Author.Id, Context.Guild.Id) && comm.StartsWith("/")) { switch (comm.Substring(1).ToLowerInvariant()) { case "status": var d = DateTime.Now; await ClientInstance.GetConnectionsAsync(); await SendMessage("----------- Support bot V4.0 status report -----------\nPing: " + (ulong)DateTime.Now.Subtract(d).TotalMilliseconds + "ms.\nRunning on " + Environment.OSVersion + ".\n----------- Support bot V4.0 status report -----------", Context.Guild.Id, Context.Channel.Id); await DeleteMessage(Context.Message); break; case "purge": await DeleteMessage(Context.Message); await Task.Delay(100); int deleted = 0; if (arguments.Count >= 2) { var u = GetUser(arguments[0], Context.Guild.Id); var u2 = GetUser(arguments[1], Context.Guild.Id); if (ulong.TryParse(arguments[0], out ulong amount)) { if (u != null) { if (int.TryParse(arguments[1], out int ammount)) { var msgs = await Context.Channel.GetMessagesAsync(ammount).Flatten(); var f = msgs.Where(k => k.Author.Id == u.Id); await Context.Channel.DeleteMessagesAsync(f); deleted = f.Count(); } else { await SendMessage(ammount + " is not a number.", Context.Guild.Id, Context.Channel.Id); } } else { if (int.TryParse(arguments[0], out int ammount)) { if (u2 != null) { var msgs = await Context.Channel.GetMessagesAsync(ammount).Flatten(); var f = msgs.Where(k => k.Author.Id == u2.Id); await Context.Channel.DeleteMessagesAsync(f); deleted = f.Count(); } else { await SendMessage("User " + arguments[0] + " not found.", Context.Guild.Id, Context.Channel.Id); } } else { await SendMessage(ammount + " is not a number.", Context.Guild.Id, Context.Channel.Id); } } } else { if (u != null) { if (int.TryParse(arguments[1], out int ammount)) { var msgs = await Context.Channel.GetMessagesAsync(ammount).Flatten(); var f = msgs.Where(k => k.Author.Id == u.Id); await Context.Channel.DeleteMessagesAsync(f); deleted = f.Count(); } else { await SendMessage(ammount + " is not a number.", Context.Guild.Id, Context.Channel.Id); } } else { await SendMessage("User " + arguments[0] + " not found.", Context.Guild.Id, Context.Channel.Id); } } } else if (arguments.Count == 1) { var u = GetUser(arguments[0], Context.Guild.Id); if (ulong.TryParse(arguments[0], out ulong amount)) { if (u != null) { var msgs = await Context.Channel.GetMessagesAsync(100).Flatten(); var f = msgs.Where(k => k.Author.Id == u.Id); await Context.Channel.DeleteMessagesAsync(f); deleted = f.Count(); } else if (int.TryParse(arguments[0], out int ammount)) { var msgs = await Context.Channel.GetMessagesAsync(ammount).Flatten(); await Context.Channel.DeleteMessagesAsync(msgs); deleted = msgs.Count(); } else { await SendMessage("User " + arguments[0] + " not found or it is not a number.", Context.Guild.Id, Context.Channel.Id); } } else { if (u != null) { var msgs = await Context.Channel.GetMessagesAsync(100).Flatten(); var f = msgs.Where(k => k.Author.Id == u.Id); await Context.Channel.DeleteMessagesAsync(f); deleted = f.Count(); } else { await SendMessage("User " + arguments[0] + " not found.", Context.Guild.Id, Context.Channel.Id); } } } else { var msgs = await Context.Channel.GetMessagesAsync(100).Flatten(); await Context.Channel.DeleteMessagesAsync(msgs); deleted = msgs.Count(); } var botms = await SendMessage("Deleted " + deleted + " messages.", Context.Guild.Id, Context.Channel.Id); await Task.Delay(5000); await DeleteMessage(botms); break; case "udetails": var user = GetUser(arguments[0], Context.Guild.Id); if (user != null) { await SendMessage(user.Mention + "'s details:\nUsername - " + user.Username + "\nNickname - " + ((user.Nickname == string.Empty || user.Nickname == null) ? "N/A" : user.Nickname) + "\nID - " + user.Id + "\nStatus - " + user.Status + "\nCustom Status/Playing - " + (user.Game.HasValue ? user.Game.Value.Name : "N/A") + "\nCreated - " + user.CreatedAt + "\nJoined - " + user.JoinedAt, Context.Guild.Id, Context.Channel.Id); } else { await SendMessage("User " + arguments[0] + " not found", Context.Guild.Id, Context.Channel.Id); } await DeleteMessage(Context.Message); break; } } }
private async void AdminCommands(string command, List <string> args, ulong ChannelID, ulong GuildID) { try { switch (command.ToLowerInvariant()) { case "status": var d = DateTime.Now; await _client.GetConnectionsAsync(); await _client.GetGuild(GuildID).GetTextChannel(ChannelID).SendMessageAsync("----------- Support bot V2.0 status report -----------\nPing: " + (ulong)DateTime.Now.Subtract(d).TotalMilliseconds + "ms.\nRunning on " + Environment.OSVersion + ".\nHave been running for: " + DateTime.Now.Subtract(_start) + ".\n----------- Support bot V2.0 status report -----------"); break; case "shutdown": await _client.LogoutAsync(); Environment.Exit(0); break; case "google": await _client.GetGuild(GuildID).GetTextChannel(ChannelID).SendMessageAsync(WebRequest.CreateHttp(string.Format("https://www.google.com/search?q={0}", WebUtility.UrlEncode(args[0]))).GetResponse().ResponseUri.ToString()); break; case "purge": int deleted = 0; if (args.Count >= 2) { bool i = ulong.TryParse(args[0], out ulong id); if (i) { var u = _client.GetUser(id); if (u == null) { var m = await _client.GetGuild(GuildID).GetTextChannel(ChannelID).GetMessagesAsync((int)id).Flatten(); await _client.GetGuild(GuildID).GetTextChannel(ChannelID).DeleteMessagesAsync(m); deleted = m.Count(); } else { var m = await _client.GetGuild(GuildID).GetTextChannel(ChannelID).GetMessagesAsync(int.Parse(args[1])).Flatten(); var f = m.Where(k => k.Author.Id == u.Id); await _client.GetGuild(GuildID).GetTextChannel(ChannelID).DeleteMessagesAsync(f); deleted = f.Count(); } } else { var u = _client.GetGuild(GuildID).Users.ToList().Find(k => { bool?username = k?.Username?.ToLowerInvariant().Contains(args[0].ToLowerInvariant()); bool?nickname = k?.Nickname?.ToLowerInvariant().Contains(args[0].ToLowerInvariant()); if ((username.HasValue && username.Value) || (nickname.HasValue && nickname.Value)) { return(true); } else { return(false); } }); var m = await _client.GetGuild(GuildID).GetTextChannel(ChannelID).GetMessagesAsync(int.Parse(args[1])).Flatten(); var f = m.Where(k => k.Author.Id == u.Id); await _client.GetGuild(GuildID).GetTextChannel(ChannelID).DeleteMessagesAsync(f); deleted = f.Count(); } } else if (args.Count == 1) { bool i = ulong.TryParse(args[0], out ulong id); if (i) { var u = _client.GetGuild(GuildID).Users.ToList().Find(k => k?.Id == id); if (u == null) { var m = await _client.GetGuild(GuildID).GetTextChannel(ChannelID).GetMessagesAsync((int)id).Flatten(); await _client.GetGuild(GuildID).GetTextChannel(ChannelID).DeleteMessagesAsync(m); deleted = m.Count(); } else { var m = await _client.GetGuild(GuildID).GetTextChannel(ChannelID).GetMessagesAsync(100).Flatten(); var f = m.Where(k => k.Author.Id == u.Id); await _client.GetGuild(GuildID).GetTextChannel(ChannelID).DeleteMessagesAsync(f); deleted = f.Count(); } } else { var u = _client.GetGuild(GuildID).Users.ToList().Find(k => { bool?username = k?.Username?.ToLowerInvariant().Contains(args[0].ToLowerInvariant()); bool?nickname = k?.Nickname?.ToLowerInvariant().Contains(args[0].ToLowerInvariant()); if ((username.HasValue && username.Value) || (nickname.HasValue && nickname.Value)) { return(true); } else { return(false); } }); var m = await _client.GetGuild(GuildID).GetTextChannel(ChannelID).GetMessagesAsync(100).Flatten(); var f = m.Where(k => k.Author.Id == u.Id); await _client.GetGuild(GuildID).GetTextChannel(ChannelID).DeleteMessagesAsync(f); deleted = f.Count(); } } else { var msgs = await _client.GetGuild(GuildID).GetTextChannel(ChannelID).GetMessagesAsync(100).Flatten(); await _client.GetGuild(GuildID).GetTextChannel(ChannelID).DeleteMessagesAsync(msgs); deleted = msgs.Count(); } var botms = await _client.GetGuild(GuildID).GetTextChannel(ChannelID).SendMessageAsync("Deleted " + deleted + " messages."); await Task.Delay(5000); await botms.DeleteAsync(); break; case "udetails": var user = _client.GetGuild(GuildID).Users.ToList().Find(k => { bool?username = k?.Username?.ToLowerInvariant().Contains(args[0].ToLowerInvariant()); bool?nickname = k?.Nickname?.ToLowerInvariant().Contains(args[0].ToLowerInvariant()); if ((username.HasValue && username.Value) || (nickname.HasValue && nickname.Value)) { return(true); } else { return(false); } }); if (user == null && ulong.TryParse(args[0], out ulong ID)) { user = _client.GetGuild(GuildID).GetUser(ID); } if (user != null) { await _client.GetGuild(GuildID).GetTextChannel(ChannelID).SendMessageAsync(user.Mention + "'s details:\nUsername - " + user.Username + "\nNickname - " + ((user.Nickname == string.Empty || user.Nickname == null) ? "N/A" : user.Nickname) + "\nID - " + user.Id + "\nStatus - " + user.Status + "\nCustom Status/Playing - " + (user.Game.HasValue ? user.Game.Value.Name : "N/A") + "\nCreated - " + user.CreatedAt + "\nJoined - " + user.JoinedAt); } else { await _client.GetGuild(GuildID).GetTextChannel(ChannelID).SendMessageAsync("User not found, did you even put a user? :thinking:"); } break; case "game": await _client.SetGameAsync(args[0]); break; } } catch (Exception ex) { Console.WriteLine(ex); } }