/// <summary> /// Creates a new parameter attribute with a blank matching pattern /// </summary> /// <param name="usage">How the parameter is used in the command</param> /// <param name="type">The system type of the parameter expected</param> /// <param name="cacheTypes">How this parameter can be found (is it data, is it a live entity)</param> /// <param name="optional">Is this parameter optional</param> public CommandParameterAttribute(CommandUsage usage, Type type, CacheReferenceType[] cacheTypes, bool optional) { Usage = usage; ParameterType = type; CacheTypes = cacheTypes; RegExPattern = string.Empty; Optional = optional; }
protected virtual void PrintUsage(CommandUsage usage) { var descriptors = CommandDescriptor.GetMemberDescriptors(this); var printer = new CommandMemberUsagePrinter(this.ExecutionName, this, this.Aliases) { Usage = usage, IsAnsiSupported = this.IsAnsiSupported }; printer.Print(this.Out, descriptors.ToArray()); }
private void ProcessTheCommand(CommandReceivedEventArgs e, IChatClient chatClient, IBotCommand botCommand, IList <string> args) { CommandUsage commandUsage = AttemptToRunCommand(e, botCommand, chatClient, args); var commandUsageEntity = new CommandUsageEntity(e.CommandWord, botCommand.GetType().FullName, e.ChatUser.UserId, e.ChatUser.DisplayName, chatClient.GetType().Name); _repository.Create(commandUsageEntity); _usageTracker.RecordUsage(commandUsage); }
private string ParseAvatars(GenshinIndex genshinIndex, CommandUsage command) { var avatarsText = genshinIndex.Avatars.Select(avatar => $"{avatar.Name} {avatar.Level}级 好感{avatar.RelationShip}级 {avatar.Constellations}命 "); if (!command.HasOption("-Avatar")) { return(string.Empty); } return($":\n{string.Join(";", avatarsText).Trim()}"); }
public async Task <string[]> ExecuteCommand(CommandUsage command) { foreach (var commandBase in Commands) { if (commandBase.GetCommandPrefix() == command.Prefix) { return(await commandBase.Execute(command)); } } return(null); }
public void WriteCommandNotFound_WritesNotFound() { string outputString; using (var newOut = new StringWriter(CultureInfo.InvariantCulture)) { var previousOut = Console.Out; Console.SetOut(newOut); CommandUsage.WriteCommandNotFound("TestCommand"); Console.SetOut(previousOut); outputString = newOut.ToString(); } Assert.That( outputString, Is.EqualTo("Invalid command 'TestCommand'." + Environment.NewLine)); }
public void WriteCommandUsage_WritesUsage() { string outputString; using (var newOut = new StringWriter(CultureInfo.InvariantCulture)) { var previousOut = Console.Out; Console.SetOut(newOut); CommandUsage.WriteCommandUsage(this.commandMetadata); Console.SetOut(previousOut); outputString = newOut.ToString(); } Assert.That(outputString, Does.Contain("TestCommand")); Assert.That(outputString, Does.Not.Contain("This is a test command.")); Assert.That(outputString, Does.Contain("Arg0")); Assert.That(outputString, Does.Contain("Arg1")); Assert.That(outputString, Does.Not.Contain("This is Arg0 help text.")); Assert.That(outputString, Does.Not.Contain("This is Arg1 help text.")); }
public override async Task <string[]> Execute(CommandUsage command) { var genshinQuery = new GenshinQuery { Uid = command.MainParam }; var genshinIndex = await genshinQuery.QueryGenshinIndex(); return(new[] { $"UID{genshinQuery.Uid}的账号", $"共有{genshinIndex.Stats.Avatars}个角色{ParseAvatars(genshinIndex, command)}", $"活跃了{genshinIndex.Stats.ActiveDays}天", $"取得了{genshinIndex.Stats.Achievements}个成就", $"找到了{genshinIndex.Stats.AnemoCulus}个风神瞳和{genshinIndex.Stats.GeoCulus}个岩神瞳", $"解锁了{genshinIndex.Stats.Waypoints}个传送点和{genshinIndex.Stats.Domains}个秘境", $"开启了{genshinIndex.Stats.LuxuriousChests}个华丽的宝箱", $"{genshinIndex.Stats.PreciousChests}个珍贵的宝箱", $"{genshinIndex.Stats.ExquisiteChests}个精致的宝箱", $"{genshinIndex.Stats.CommonChests}个普通的宝箱", $"凹到了深渊{genshinIndex.Stats.SpiralAbyss}" }); }
public GeneralModule(RuntimeModule m) { EventSystem.Instance.AddCommandDoneEvent(x => { x.Name = "--count-commands"; x.processEvent = async(msg, e, s, t) => { if (s) { using (var context = new MikiContext()) { CommandUsage u = await context.CommandUsages.FindAsync(msg.Author.Id.ToDbLong(), e.Name); if (u == null) { u = context.CommandUsages.Add(new CommandUsage() { UserId = msg.Author.Id.ToDbLong(), Amount = 1, Name = e.Name }).Entity; } else { u.Amount++; } User user = await User.GetAsync(context, msg.Author); if (user != null) { user.Total_Commands++; } await context.SaveChangesAsync(); } } }; }); }
public static bool HasOption(this CommandUsage ex, string optionName) { return(ex.Options.HasOptions() && ex.Options.Any(s => s == optionName)); }
public abstract Task <string[]> Execute(CommandUsage command);
public async Task ProfileAsync(EventContext e) { Stopwatch sw = new Stopwatch(); sw.Start(); using (var context = new MikiContext()) { long id = 0; ulong uid = 0; if (e.message.MentionedUserIds.Any()) { uid = e.message.MentionedUserIds.First(); id = uid.ToDbLong(); } else { uid = e.message.Author.Id; id = uid.ToDbLong(); } Locale locale = new Locale(e.Channel.Id.ToDbLong()); IDiscordUser discordUser = await e.Guild.GetUserAsync(uid); User account = await User.GetAsync(context, discordUser); EmojiBarSet onBarSet = new EmojiBarSet( "<:mbarlefton:391971424442646534>", "<:mbarmidon:391971424920797185>", "<:mbarrighton:391971424488783875>"); EmojiBarSet offBarSet = new EmojiBarSet( "<:mbarleftoff:391971424824459265>", "<:mbarmidoff:391971424824197123>", "<:mbarrightoff:391971424862208000>"); if (account != null) { IDiscordEmbed embed = Utils.Embed .SetDescription(account.Title) .SetAuthor(locale.GetString("miki_global_profile_user_header", account.Name), "", "https://patreon.com/mikibot") .SetThumbnailUrl(discordUser.AvatarUrl); long serverid = e.Guild.Id.ToDbLong(); LocalExperience localExp = account.LocalExperience.FirstOrDefault(x => x.ServerId == e.Guild.Id.ToDbLong()); if (localExp == null) { localExp = await LocalExperience.CreateAsync(context, serverid, id); } int rank = await localExp.GetRank(context); int localLevel = User.CalculateLevel(localExp.Experience); int maxLocalExp = User.CalculateLevelExperience(localLevel); int minLocalExp = User.CalculateLevelExperience(localLevel - 1); EmojiBar expBar = new EmojiBar(maxLocalExp - minLocalExp, onBarSet, offBarSet, 6); string infoValue = new MessageBuilder() .AppendText(locale.GetString("miki_module_accounts_information_level", localLevel, localExp.Experience, maxLocalExp)) .AppendText(await expBar.Print(localExp.Experience - minLocalExp, e.Channel)) .AppendText(locale.GetString("miki_module_accounts_information_rank", rank)) .AppendText("Reputation: " + account.Reputation, MessageFormatting.Plain, false) .Build(); embed.AddInlineField(locale.GetString("miki_generic_information"), infoValue); int globalLevel = User.CalculateLevel(account.Total_Experience); int maxGlobalExp = User.CalculateLevelExperience(globalLevel); int minGlobalExp = User.CalculateLevelExperience(globalLevel - 1); int globalRank = await account.GetGlobalRankAsync(); EmojiBar globalExpBar = new EmojiBar(maxGlobalExp - minGlobalExp, onBarSet, offBarSet, 6); string globalInfoValue = new MessageBuilder() .AppendText(locale.GetString("miki_module_accounts_information_level", globalLevel, account.Total_Experience, maxGlobalExp)) .AppendText(await globalExpBar.Print(account.Total_Experience - minGlobalExp, e.Channel)) .AppendText(locale.GetString("miki_module_accounts_information_rank", globalRank), MessageFormatting.Plain, false) .Build(); embed.AddInlineField(locale.GetString("miki_generic_global_information"), globalInfoValue); embed.AddInlineField(locale.GetString("miki_generic_mekos"), account.Currency + "🔸"); List <Marriage> Marriages = account.Marriages? .Select(x => x.Marriage) .Where(x => !x.IsProposing) .OrderBy(mar => mar.TimeOfMarriage) .ToList(); List <User> users = new List <User>(); int maxCount = Marriages?.Count ?? 0; for (int i = 0; i < maxCount; i++) { users.Add(await context.Users.FindAsync(Marriages[i].GetOther(id))); } if (Marriages?.Count > 0) { List <string> MarriageStrings = new List <string>(); for (int i = 0; i < maxCount; i++) { if (Marriages[i].GetOther(id) != 0) { MarriageStrings.Add($"💕 {users[i].Name} (_{Marriages[i].TimeOfMarriage.ToShortDateString()}_)"); } } embed.AddInlineField( locale.GetString("miki_module_accounts_profile_marriedto"), string.Join("\n", MarriageStrings)); } Random r = new Random((int)id - 3); embed.Color = new Miki.Common.Color((float)r.NextDouble(), (float)r.NextDouble(), (float)r.NextDouble()); CommandUsage favouriteCommand = account.CommandsUsed? .OrderByDescending(c => c.Amount) .FirstOrDefault(); string favCommand = $"{favouriteCommand?.Name ?? locale.GetString("miki_placeholder_null")} ({ favouriteCommand?.Amount ?? 0 })"; embed.AddInlineField(locale.GetString("miki_module_accounts_profile_favourite_command"), favCommand); if (account.Achievements != null) { string achievements = AchievementManager.Instance.PrintAchievements(account.Achievements); embed.AddInlineField( locale.GetString("miki_generic_achievements"), achievements != "" ? achievements : locale.GetString("miki_placeholder_null")); } embed.SetFooter( locale.GetString("miki_module_accounts_profile_footer", account.DateCreated.ToShortDateString(), sw.ElapsedMilliseconds), ""); sw.Stop(); embed.QueueToChannel(e.Channel); } else { e.ErrorEmbed(locale.GetString("error_account_null")) .QueueToChannel(e.Channel); } } }
public CommandUsageAttribute(CommandUsage usage) { Usage = usage; }
/// <summary> /// /// </summary> /// <param name="name">名稱</param> /// <param name="usage">用法</param> public RelayCommandAttribute(string name, CommandUsage usage) { Name = name; Usage = usage; }
public IrcCommandAttribute(string commandName, CommandUsage usage = CommandUsage.All) : base() { _commandUsage = usage; _commandName = commandName; }
void ICommandUsage.Print(CommandUsage usage) { this.PrintUsage(usage); }
public async Task ProfileAsync(EventContext e) { Stopwatch sw = new Stopwatch(); sw.Start(); using (var context = new MikiContext()) { long id = 0; ulong uid = 0; var arg = e.Arguments.FirstOrDefault(); if (arg != null) { uid = (await arg.GetUserAsync(e.Guild)).Id; id = uid.ToDbLong(); } else { uid = e.message.Author.Id; id = uid.ToDbLong(); } IDiscordGuildUser discordUser = await e.Guild.GetUserAsync(uid); User account = await User.GetAsync(context, discordUser); string icon = ""; if (await account.IsDonatorAsync(context)) { icon = "https://cdn.discordapp.com/emojis/421969679561785354.png"; } if (account != null) { EmbedBuilder embed = Utils.Embed .SetDescription(account.Title) .SetAuthor(e.GetResource("miki_global_profile_user_header", account.Name), icon, "https://patreon.com/mikibot") .SetThumbnail(discordUser.GetAvatarUrl()); long serverid = e.Guild.Id.ToDbLong(); LocalExperience localExp = await LocalExperience.GetAsync(context, e.Guild.Id.ToDbLong(), discordUser); if (localExp == null) { localExp = await LocalExperience.CreateAsync(context, serverid, discordUser); } int rank = await localExp.GetRank(context); int localLevel = User.CalculateLevel(localExp.Experience); int maxLocalExp = User.CalculateLevelExperience(localLevel); int minLocalExp = User.CalculateLevelExperience(localLevel - 1); EmojiBar expBar = new EmojiBar(maxLocalExp - minLocalExp, onBarSet, offBarSet, 6); string infoValue = new MessageBuilder() .AppendText(e.GetResource("miki_module_accounts_information_level", localLevel, localExp.Experience, maxLocalExp)) .AppendText(await expBar.Print(localExp.Experience - minLocalExp, (IDiscordGuildChannel)e.Channel)) .AppendText(e.GetResource("miki_module_accounts_information_rank", rank)) .AppendText("Reputation: " + account.Reputation, MessageFormatting.Plain, false) .Build(); embed.AddInlineField(e.GetResource("miki_generic_information"), infoValue); int globalLevel = User.CalculateLevel(account.Total_Experience); int maxGlobalExp = User.CalculateLevelExperience(globalLevel); int minGlobalExp = User.CalculateLevelExperience(globalLevel - 1); int globalRank = await account.GetGlobalRankAsync(); EmojiBar globalExpBar = new EmojiBar(maxGlobalExp - minGlobalExp, onBarSet, offBarSet, 6); string globalInfoValue = new MessageBuilder() .AppendText(e.GetResource("miki_module_accounts_information_level", globalLevel, account.Total_Experience, maxGlobalExp)) .AppendText( await globalExpBar.Print(account.Total_Experience - minGlobalExp, e.Channel as IDiscordGuildChannel) ) .AppendText(e.GetResource("miki_module_accounts_information_rank", globalRank), MessageFormatting.Plain, false) .Build(); embed.AddInlineField(e.GetResource("miki_generic_global_information"), globalInfoValue); embed.AddInlineField(e.GetResource("miki_generic_mekos"), account.Currency + "<:mekos:421972155484471296>"); List <UserMarriedTo> Marriages = await Marriage.GetMarriagesAsync(context, id); Marriages.RemoveAll(x => x.Marriage.IsProposing); List <string> users = new List <string>(); int maxCount = Marriages?.Count ?? 0; for (int i = 0; i < maxCount; i++) { users.Add(await User.GetNameAsync(context, Marriages[i].GetOther(id))); } if (Marriages?.Count > 0) { List <string> MarriageStrings = new List <string>(); for (int i = 0; i < maxCount; i++) { if (Marriages[i].GetOther(id) != 0) { MarriageStrings.Add($"💕 {users[i]} (_{Marriages[i].Marriage.TimeOfMarriage.ToShortDateString()}_)"); } } string marriageText = string.Join("\n", MarriageStrings); if (string.IsNullOrEmpty(marriageText)) { marriageText = e.GetResource("miki_placeholder_null"); } embed.AddInlineField( e.GetResource("miki_module_accounts_profile_marriedto"), marriageText); } Random r = new Random((int)id - 3); Color c = new Color((float)r.NextDouble(), (float)r.NextDouble(), (float)r.NextDouble()); embed.SetColor(c); CommandUsage favouriteCommand = await context.CommandUsages .OrderByDescending(x => x.Amount) .FirstOrDefaultAsync(x => x.UserId == id); string favCommand = $"{favouriteCommand?.Name ?? e.GetResource("miki_placeholder_null")} ({ favouriteCommand?.Amount ?? 0 })"; embed.AddInlineField(e.GetResource("miki_module_accounts_profile_favourite_command"), favCommand); List <Achievement> allAchievements = await context.Achievements.Where(x => x.Id == id).ToListAsync(); string achievements = e.GetResource("miki_placeholder_null"); if (allAchievements != null) { if (allAchievements.Count > 0) { achievements = AchievementManager.Instance.PrintAchievements(allAchievements); } } embed.AddInlineField( e.GetResource("miki_generic_achievements"), achievements); embed.SetFooter( e.GetResource("miki_module_accounts_profile_footer", account.DateCreated.ToShortDateString(), sw.ElapsedMilliseconds), ""); sw.Stop(); embed.ToEmbed().QueueToChannel(e.Channel); } else { e.ErrorEmbed(e.GetResource("error_account_null")) .ToEmbed().QueueToChannel(e.Channel); } } }
private bool Equals(CommandUsage other) { return string.Equals(Usage, other.Usage) && string.Equals(Description, other.Description) && Order == other.Order; }