public async Task GiphyGet([Remainder] string input = "") { var faceArgs = input.Split(' '); var face = GifUtilities.DefaultFace; if (faceArgs[0].Contains("Face:") && faceArgs[0].Split(':').Length == 2) { face = faceArgs[0].Split(':')[1]; input = String.Join(" ", faceArgs.Skip(1)); } string searchString = "http://api.giphy.com/v1/gifs/translate?api_key=" + GiphyKey + "&s=" + Uri.EscapeDataString(input); var json = new WebClient().DownloadString(searchString); JToken giffyToken = JObject.Parse(json); string url = giffyToken.SelectToken("data").SelectToken("url").ToString(); string originalGif = giffyToken.SelectToken("data").SelectToken("images").SelectToken("original").SelectToken("url").ToString(); try { string gif = GifUtilities.DoFaceReplace(originalGif, face); await Context.Channel.SendFileAsync(gif); return; } catch (Exception e) { Console.WriteLine(e); } await ReplyAsync(url); }
public async Task HandleCommands(SocketMessage messageParam) { var message = messageParam as SocketUserMessage; var userName = message.Author.Username; if (message == null) { return; } int argPos = 0; var context = new CommandContext(client, message); #region command_or_at if (!(message.HasCharPrefix('!', ref argPos) || message.HasMentionPrefix(client.CurrentUser, ref argPos)) && !overRideDefaultAllowances(message)) { return; } #endregion string channelFrom = message.Channel.Name; //move to config List <string> allowedChannels = new List <string>(new string[] { "bot-channel" }); Tuple <ModuleUtilities.ImageLocations, string> imageWhere = CheckForImage(message); if (imageWhere.Item1 != ModuleUtilities.ImageLocations.None && false) //disable this for the time being it doesn't totally work and presents issues of its own { new Thread(async() => { var typingOnReplaceImage = context.Channel.EnterTypingState(); var gif = GifUtilities.DoFaceReplace(imageWhere.Item2, "lampreyme.png"); //lets do some dubious reflection //PropertyInfo propInfo = typeof(SocketUserMessage).GetProperty("Attachments"); //FieldInfo contentField = propInfo.GetBackingField(); //contentField.SetValue(message, gif); if (imageWhere.Item1 == ModuleUtilities.ImageLocations.Message) { await context.Channel.SendMessageAsync(gif); } else { await context.Channel.SendFileAsync(gif); } typingOnReplaceImage.Dispose(); return; ; //typingOnReplaceImage.Dispose(); }).Start(); } #region wrong_channel if (!allowedChannels.Exists(s => string.Equals(s, channelFrom, StringComparison.OrdinalIgnoreCase)) && !overRideDefaultAllowances(message)) { var wrongContext = new CommandContext(client, message); await wrongContext.Channel.SendMessageAsync(("WRONG CHANNEL")); return; } #endregion #region intercept_text if (overRideDefaultAllowances(message) && !message.HasCharPrefix('!', ref argPos)) { PropertyInfo propInfo = typeof(SocketUserMessage).GetProperty("Content"); FieldInfo contentField = propInfo.GetBackingField(); argPos++; Random rand = new Random(); int pick = rand.Next(0, 2); if (pick == 0) { contentField.SetValue(message, "!scrustspeak 4 " + message.Content); } else { contentField.SetValue(message, "!muddlespeak " + message.Content); } } #endregion var typing = context.Channel.EnterTypingState(); new Thread(async() => { var result = await commands.ExecuteAsync(context, argPos, services); typing.Dispose(); if (!result.IsSuccess) { await context.Channel.SendMessageAsync(result.ErrorReason); } typing.Dispose(); }).Start(); typing.Dispose(); }