|
- using Discord;
- using Discord.Commands;
- using System.IO;
- using System.Threading.Tasks;
- using TextCommandFramework.Services;
-
- namespace TextCommandFramework.Modules
- {
- // Modules must be public and inherit from an IModuleBase
- public class PublicModule : ModuleBase<SocketCommandContext>
- {
- // Dependency Injection will fill this value in for us
- public PictureService PictureService { get; set; }
-
- [Command("ping")]
- [Alias("pong", "hello")]
- public Task PingAsync()
- => ReplyAsync("pong!");
-
- [Command("cat")]
- public async Task CatAsync()
- {
- // Get a stream containing an image of a cat
- var stream = await PictureService.GetCatPictureAsync();
- // Streams must be seeked to their beginning before being uploaded!
- stream.Seek(0, SeekOrigin.Begin);
- await Context.Channel.SendFileAsync(stream, "cat.png");
- }
-
- // Get info on a user, or the user who invoked the command if one is not specified
- [Command("userinfo")]
- public async Task UserInfoAsync(IUser user = null)
- {
- user ??= Context.User;
-
- await ReplyAsync(user.ToString());
- }
-
- // Ban a user
- [Command("ban")]
- [RequireContext(ContextType.Guild)]
- // make sure the user invoking the command can ban
- [RequireUserPermission(GuildPermission.BanMembers)]
- // make sure the bot itself can ban
- [RequireBotPermission(GuildPermission.BanMembers)]
- public async Task BanUserAsync(IGuildUser user, [Remainder] string reason = null)
- {
- await user.Guild.AddBanAsync(user, reason: reason);
- await ReplyAsync("ok!");
- }
-
- // [Remainder] takes the rest of the command's arguments as one argument, rather than splitting every space
- [Command("echo")]
- public Task EchoAsync([Remainder] string text)
- // Insert a ZWSP before the text to prevent triggering other bots!
- => ReplyAsync('\u200B' + text);
-
- // 'params' will parse space-separated elements into a list
- [Command("list")]
- public Task ListAsync(params string[] objects)
- => ReplyAsync("You listed: " + string.Join("; ", objects));
-
- // Setting a custom ErrorMessage property will help clarify the precondition error
- [Command("guild_only")]
- [RequireContext(ContextType.Guild, ErrorMessage = "Sorry, this command must be ran from within a server, not a DM!")]
- public Task GuildOnlyCommand()
- => ReplyAsync("Nothing to see here!");
- }
- }
|