public static void VkSendImageMessage(string accessToken, RMessagesData.RCmdsListCollect.RCommandsItem rCommandItem) { try { int peerId = rCommandItem.PeerId; ThreadCore.UploadingPhotos = true; var url = SiteUtils.GetMessageAttachmentUrl(accessToken); var attachment = SiteUtils.GetImageByQuery(accessToken, rCommandItem); if (attachment == null) { string message = $"Изображение по запросу {rCommandItem.Message} не найдено!"; SiteUtils.SendMessage(accessToken, rCommandItem, message); LogCore.Log(message, JsonConvert.SerializeObject(rCommandItem), EnumData.LogTypeCommand.CMessage, EnumData.LogSourceCommand.VK); return; } if (attachment.Size() == new Size(0, 0)) { LogCore.Log("Смена ключей Google", JsonConvert.SerializeObject(rCommandItem), EnumData.LogTypeCommand.CMessage, EnumData.LogSourceCommand.VK); return; } SiteUtils.MessagesSetActivity(accessToken, peerId); var photos = SiteUtils.UploadPhotoToServerAsync(url, attachment); var photoId = SiteUtils.SaveMessagePhoto(accessToken, photos); //SiteUtils.MessagesSetActivity(accessToken, peerId); SiteUtils.SendMessage(accessToken, rCommandItem, "", $"photo{photoId}"); ThreadCore.UploadingPhotos = false; LogCore.Log(rCommandItem.Message, JsonConvert.SerializeObject(rCommandItem), EnumData.LogTypeCommand.CMessage, EnumData.LogSourceCommand.VK); } catch (Exception ex) { ex.Error(); } }
public static void CommandExecutionThread_Start() { if (CommandExecutionThread.IsAlive) { return; } CommandExecutionThread = new Thread(delegate() { do { try { if (RMessagesData.RCmdsListCollect.RCmdsList.Count <= 0 || RMessagesData.RCmdsListCollect.RCmdsList[0] == null) { Thread.Sleep(200); continue; } var rCommandItem = RMessagesData.RCmdsListCollect.RCmdsList[0]; RMessagesData.RCmdsListCollect.RCmdsList.Remove(rCommandItem); var accessToken = SiteData.VK.GetAccessToken(); int peerId = rCommandItem.PeerId; SiteUtils.MessagesSetActivity(accessToken, peerId); SiteUtils.MakeAsReadMessage(accessToken, rCommandItem); Action action = null; switch (rCommandItem.MCommand) { case EnumData.MessageCommand.Image: action = () => MessagesCore.VkSendImageMessage(accessToken, rCommandItem); break; case EnumData.MessageCommand.CommandUser: foreach (var key in RMessagesData.UserCommands.Keys) { foreach (var part in key) { if (!rCommandItem.STRCommand.Equals(part, StringComparison.OrdinalIgnoreCase)) { continue; } rCommandItem.Message = rCommandItem.Message.Replace(part, String.Empty).Trim(); switch (RMessagesData.UserCommands[key]) { case EnumData.UserCmd.Joke: action = () => MessagesCore.VkSendJokeMessage(accessToken, rCommandItem); break; case EnumData.UserCmd.Weather: break; case EnumData.UserCmd.Rsp: action = () => MessagesCore.VkSendRSPMessage(accessToken, rCommandItem); break; case EnumData.UserCmd.Random: action = () => MessagesCore.VkSendRandomValueMessage(accessToken, rCommandItem); break; case EnumData.UserCmd.Awesome: action = () => MessagesCore.VkSendAwesomeMessage(accessToken, rCommandItem); break; case EnumData.UserCmd.Help: action = () => MessagesCore.VkSendHelpMessage(accessToken, rCommandItem); break; case EnumData.UserCmd.AnonymousSendGroup: action = () => MessagesCore.VkSendAnonymousMessage(accessToken, rCommandItem); break; case EnumData.UserCmd.VoiceMessage: action = () => MessagesCore.VkSendVoiceRecognizedMessage(accessToken, rCommandItem); break; case EnumData.UserCmd.MailCheck: action = () => MessagesCore.VkMailCheck(accessToken, rCommandItem); break; default: throw new ArgumentOutOfRangeException(); } } } break; case EnumData.MessageCommand.Music: action = () => MessagesCore.VkSendMusicMessage(accessToken, rCommandItem); break; case EnumData.MessageCommand.CommandAdmin: foreach (var key in RMessagesData.AdminCommands.Keys) { rCommandItem.Message = rCommandItem.Message.ToLower(); if (!rCommandItem.STRCommand.Equals(key, StringComparison.OrdinalIgnoreCase)) { continue; } rCommandItem.Message = rCommandItem.Message.Replace(key, string.Empty).Trim(); switch (RMessagesData.AdminCommands[key]) { case EnumData.AdminCmd.ImageChange: action = () => MessagesCore.VkChangeImage(accessToken, rCommandItem); break; case EnumData.AdminCmd.ImageCacheDelete: action = () => MessagesCore.VkImageCacheDelete(accessToken, rCommandItem); break; case EnumData.AdminCmd.TempImageChange: break; case EnumData.AdminCmd.MailAdd: action = () => MessagesCore.VkMailAdd(accessToken, rCommandItem); break; case EnumData.AdminCmd.MailRemove: action = () => MessagesCore.VkMailRemove(accessToken, rCommandItem); break; default: throw new ArgumentOutOfRangeException(); } } break; case EnumData.MessageCommand.Wiki: if (!rCommandItem.Message.All(i => i == '?' || i == ')' || i == '(')) { action = () => MessagesCore.VkSendWikiMessage(accessToken, rCommandItem); } break; default: throw new ArgumentOutOfRangeException(); } if (action == null) { continue; } new Thread(action.Invoke) { IsBackground = true }.Start(); } catch (Exception ex) { ex.Error(); } } while (!CommandExecutionThreadStop); CommandExecutionThreadStop = false; CommandExecutionThread.Abort(); }) { IsBackground = true }; CommandExecutionThread.Start(); }
public static void VkSendAnonymousMessage(string accessToken, RMessagesData.RCmdsListCollect.RCommandsItem rCommandItem) { try { if (rCommandItem.Message.IndexOf(" ", StringComparison.OrdinalIgnoreCase) < 0) { SiteUtils.SendMessage(accessToken, rCommandItem, "Ошибка в распозновании названия группы!"); return; } Regex r = new Regex(@"\s+"); var groupData = DataStorage.DialogsList.Find( i => r.Replace(i.Title, @" ").Split(new[] { ' ' }, StringSplitOptions.RemoveEmptyEntries) .All(j => r.Replace(rCommandItem.Message, @" ").IndexOf(j, StringComparison.OrdinalIgnoreCase) >= 0)); if (string.IsNullOrWhiteSpace(groupData?.Title)) { SiteUtils.SendMessage(accessToken, rCommandItem, "Ошибка в распозновании названия группы!"); return; } rCommandItem.Message = Regex.Replace(rCommandItem.Message, groupData.Title, "", RegexOptions.IgnoreCase).Trim(); if (groupData.ChatId == 0) { SiteUtils.SendMessage(accessToken, rCommandItem, "Ошибка в распозновании идентификатора группы!"); return; } if (DataStorage.LastAnonymousMessage.ContainsKey(rCommandItem.FromId)) { if ((DateTime.Now - DataStorage.LastAnonymousMessage[rCommandItem.FromId]).TotalSeconds < 30) { SiteUtils.SendMessage(accessToken, rCommandItem, "Анонимные сообщения можно отправлять ТОЛЬКО один раз в 30 секунд!"); //return; } } else { DataStorage.LastAnonymousMessage.Add(rCommandItem.FromId, DateTime.Now); } var photoId = string.Empty; if (rCommandItem?.Attachments != null && rCommandItem.Attachments.Any(i => i.Photo != null)) { int peerId = rCommandItem.PeerId; ThreadCore.UploadingPhotos = true; var url = SiteUtils.GetMessageAttachmentUrl(accessToken); SiteUtils.MessagesSetActivity(accessToken, peerId); var attachments = rCommandItem?.Attachments?.Where(i => i.Photo != null); var attachment = attachments.First(); string imageLink = attachment.Photo.Sizes.First(i => i.Width * i.Height == attachment.Photo.Sizes.Max(size2 => size2.Height * size2.Width)).Url; var imagePath = $"{FileCore.PathImages}\\{imageLink.GetDeterministicHashCode()}.png"; using (WebClient wc = new WebClient()) { wc.DownloadFile(new Uri(imageLink), imagePath); } var image = Image.Load <Rgba32>(imagePath); if (image.Height > 720) { int height = 720; int width = (int)(720 / (double)image.Height * image.Width); image.Mutate(i => i.Resize(width, height)); } var photos = SiteUtils.UploadPhotoToServerAsync(url, image); photoId = SiteUtils.SaveMessagePhoto(accessToken, photos); SiteUtils.MessagesSetActivity(accessToken, peerId); ThreadCore.UploadingPhotos = false; } rCommandItem.PeerId = groupData.ChatId; var message = $"[АНОНИМНОЕ СООБЩЕНИЕ]" + "\n" + rCommandItem.Message .Substring(rCommandItem.Message.LastIndexOf("*", StringComparison.OrdinalIgnoreCase) + 1).Trim(); SiteUtils.MakeAsReadMessage(accessToken, rCommandItem); rCommandItem.Id = -1; DataStorage.LastAnonymousMessage[rCommandItem.FromId] = DateTime.Now; if (string.IsNullOrWhiteSpace(photoId)) { SiteUtils.SendMessage(accessToken, rCommandItem, message); } else { SiteUtils.SendMessage(accessToken, rCommandItem, message, $"photo{photoId}"); } LogCore.Log(rCommandItem.Message, JsonConvert.SerializeObject(rCommandItem), EnumData.LogTypeCommand.CMessage, EnumData.LogSourceCommand.VK); } catch (Exception ex) { ex.Error(); } }