コード例 #1
0
        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());
        }
コード例 #2
0
        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);
        }
コード例 #3
0
        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;
                }
            }
        }
コード例 #4
0
        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);
            }
        }