100 lines
5.5 KiB
C#
100 lines
5.5 KiB
C#
using Discord;
|
|
using Discord.Commands;
|
|
using NadekoBot.Classes;
|
|
using NadekoBot.Extensions;
|
|
using System;
|
|
using System.Linq;
|
|
using System.Text;
|
|
|
|
namespace NadekoBot.Modules.Utility.Commands
|
|
{
|
|
class InfoCommands : DiscordCommand
|
|
{
|
|
public InfoCommands(DiscordModule module) : base(module)
|
|
{
|
|
}
|
|
|
|
internal override void Init(CommandGroupBuilder cgb)
|
|
{
|
|
cgb.CreateCommand(Module.Prefix + "serverinfo")
|
|
.Alias(Module.Prefix + "sinfo")
|
|
.Description($"Shows info about the server the bot is on. If no channel is supplied, it defaults to current one. |{Module.Prefix}sinfo Some Server")
|
|
.Parameter("server", ParameterType.Optional)
|
|
.Do(async e =>
|
|
{
|
|
var servText = e.GetArg("server")?.Trim();
|
|
var server = string.IsNullOrWhiteSpace(servText)
|
|
? e.Server
|
|
: NadekoBot.Client.FindServers(servText).FirstOrDefault();
|
|
if (server == null)
|
|
return;
|
|
var createdAt = new DateTime(2015, 1, 1, 0, 0, 0, 0, DateTimeKind.Utc).AddMilliseconds(server.Id >> 22);
|
|
var sb = new StringBuilder();
|
|
sb.AppendLine($"`Name:` **#{server.Name}**");
|
|
sb.AppendLine($"`Owner:` **{server.Owner}**");
|
|
sb.AppendLine($"`Id:` **{server.Id}**");
|
|
sb.AppendLine($"`Icon Url:` **{await server.IconUrl.ShortenUrl().ConfigureAwait(false)}**");
|
|
sb.AppendLine($"`TextChannels:` **{server.TextChannels.Count()}** `VoiceChannels:` **{server.VoiceChannels.Count()}**");
|
|
sb.AppendLine($"`Members:` **{server.UserCount}** `Online:` **{server.Users.Count(u => u.Status == UserStatus.Online)}** (may be incorrect)");
|
|
sb.AppendLine($"`Roles:` **{server.Roles.Count()}**");
|
|
sb.AppendLine($"`Created At:` **{createdAt}**");
|
|
if (server.CustomEmojis.Count() > 0)
|
|
sb.AppendLine($"`Custom Emojis:` **{string.Join(", ", server.CustomEmojis)}**");
|
|
if (server.Features.Count() > 0)
|
|
sb.AppendLine($"`Features:` **{string.Join(", ", server.Features)}**");
|
|
if (!string.IsNullOrWhiteSpace(server.SplashId))
|
|
sb.AppendLine($"`Region:` **{server.Region.Name}**");
|
|
await e.Channel.SendMessage(sb.ToString()).ConfigureAwait(false);
|
|
});
|
|
|
|
cgb.CreateCommand(Module.Prefix + "channelinfo")
|
|
.Alias(Module.Prefix + "cinfo")
|
|
.Description($"Shows info about the channel. If no channel is supplied, it defaults to current one. |{Module.Prefix}cinfo #some-channel")
|
|
.Parameter("channel", ParameterType.Optional)
|
|
.Do(async e =>
|
|
{
|
|
var chText = e.GetArg("channel")?.Trim();
|
|
var ch = string.IsNullOrWhiteSpace(chText)
|
|
? e.Channel
|
|
: e.Server.FindChannels(chText, Discord.ChannelType.Text).FirstOrDefault();
|
|
if (ch == null)
|
|
return;
|
|
var createdAt = new DateTime(2015, 1, 1, 0, 0, 0, 0, DateTimeKind.Utc).AddMilliseconds(ch.Id >> 22);
|
|
var sb = new StringBuilder();
|
|
sb.AppendLine($"`Name:` **#{ch.Name}**");
|
|
sb.AppendLine($"`Id:` **{ch.Id}**");
|
|
sb.AppendLine($"`Created At:` **{createdAt}**");
|
|
sb.AppendLine($"`Topic:` **{ch.Topic}**");
|
|
sb.AppendLine($"`Users:` **{ch.Users.Count()}**");
|
|
await e.Channel.SendMessage(sb.ToString()).ConfigureAwait(false);
|
|
});
|
|
|
|
cgb.CreateCommand(Module.Prefix + "userinfo")
|
|
.Alias(Module.Prefix + "uinfo")
|
|
.Description($"Shows info about the user. If no user is supplied, it defaults a user running the command. |{Module.Prefix}uinfo @SomeUser")
|
|
.Parameter("user", ParameterType.Optional)
|
|
.Do(async e =>
|
|
{
|
|
var userText = e.GetArg("user")?.Trim();
|
|
var user = string.IsNullOrWhiteSpace(userText)
|
|
? e.User
|
|
: e.Server.FindUsers(userText).FirstOrDefault();
|
|
if (user == null)
|
|
return;
|
|
var sb = new StringBuilder();
|
|
sb.AppendLine($"`Name#Discrim:` **#{user.Name}#{user.Discriminator}**");
|
|
if (!string.IsNullOrWhiteSpace(user.Nickname))
|
|
sb.AppendLine($"`Nickname:` **{user.Nickname}**");
|
|
sb.AppendLine($"`Id:` **{user.Id}**");
|
|
sb.AppendLine($"`Current Game:` **{(user.CurrentGame?.Name == null ? "-" : user.CurrentGame.Value.Name)}**");
|
|
if (user.LastOnlineAt != null)
|
|
sb.AppendLine($"`Last Online:` **{user.LastOnlineAt:HH:mm:ss}**");
|
|
sb.AppendLine($"`Joined At:` **{user.JoinedAt}**");
|
|
sb.AppendLine($"`Roles:` **({user.Roles.Count()}) - {string.Join(", ", user.Roles.Select(r => r.Name))}**");
|
|
sb.AppendLine($"`AvatarUrl:` **{await user.AvatarUrl.ShortenUrl().ConfigureAwait(false)}**");
|
|
await e.Channel.SendMessage(sb.ToString()).ConfigureAwait(false);
|
|
});
|
|
}
|
|
}
|
|
}
|