Advertisement
Guest User

Untitled

a guest
Jul 24th, 2017
69
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 2.70 KB | None | 0 0
  1. using System;
  2. using System.Collections;
  3. using System.Collections.Generic;
  4. using UnityEngine;
  5. using WyrmTale;
  6.  
  7. public class BotWorker : LocalSingletonBehaviour<BotWorker> {
  8.     public enum States {
  9.         Stopped, Working
  10.     }
  11.  
  12.     public States State {
  13.         get {
  14.             return state;
  15.         }
  16.         set {
  17.             state = value;
  18.             OnStateChanged.Invoke(value);
  19.         }
  20.     }
  21.  
  22.     public event Action<States> OnStateChanged = delegate { };
  23.  
  24.     private States state;
  25.     private VkApi vkApi;
  26.     private Dictionary<int,int> lastMessages = new Dictionary<int,int>();
  27.  
  28.     private readonly static int BOT_ID = -150683496;
  29.  
  30.     public void Launch (string token) {
  31.         if (vkApi != null) return;
  32.  
  33.         lastMessages = LastMessagesDataController.I.Load();
  34.  
  35.         vkApi = VkApi.GetVkApi(token);
  36.  
  37.         State = States.Working;
  38.  
  39.         StartCoroutine(WorkingCoroutine());
  40.     }
  41.  
  42.     public void ShutDown () {
  43.         State = States.Stopped;
  44.  
  45.         StopAllCoroutines();
  46.  
  47.         vkApi = null;
  48.  
  49.         LastMessagesDataController.I.Save(lastMessages);
  50.     }
  51.  
  52.     public override void DoDestroy () {
  53.         LastMessagesDataController.I.Save(lastMessages);
  54.  
  55.         base.DoDestroy();
  56.     }
  57.  
  58.     private IEnumerator WorkingCoroutine () {
  59.         while (State == States.Working) {
  60.             vkApi.GetDialogs(20,OnGetDialogs);
  61.             yield return new WaitForSeconds(7F);
  62.         }
  63.     }
  64.  
  65.     private void OnGetDialogs (List<JSON> items) {
  66.         foreach (JSON i in items) {
  67.             MessageIsActual(i);
  68.         }
  69.     }
  70.  
  71.     private void MessageIsActual (JSON item) {
  72.         JSON message = item.ToJSON("message");
  73.         int user_id = message.ToInt("user_id");
  74.  
  75.         vkApi.GetHistory(user_id,1,MessageIsActualCallback);
  76.     }
  77.  
  78.     private void MessageIsActualCallback (List<JSON> items) {
  79.         if (items.Count.Equals(0)) return;
  80.  
  81.         int from_id = items[0].ToInt("from_id");
  82.  
  83.         if (BOT_ID.Equals(from_id)) return;
  84.  
  85.         int user_id = items[0].ToInt("user_id");
  86.         int message_id = items[0].ToInt("id");
  87.         string body = items[0].ToString("body");
  88.  
  89.         HandleMessage(body,user_id,message_id,!lastMessages.ContainsKey(user_id));
  90.     }
  91.  
  92.     private void HandleMessage (string body,int user_id,int message_id,bool firstMessage = true) {
  93.         if (lastMessages.ContainsKey(user_id)) {
  94.             if (!lastMessages[user_id].Equals(message_id)) {
  95.                 if (body.ToLower().Contains("скинь гачимучи")) {
  96.                     vkApi.SendMessageWithVideo(user_id,PhrasesManager.I.GetRandomGachimuchiPhrase(),VideoManager.I.GetRandomGachimuchiRemix(user_id));
  97.                     lastMessages[user_id] = message_id;
  98.                 } else {
  99.                     vkApi.SendMessage(user_id,"Напиши мне 'Скинь гачимучи' и я тебе скину годный ремикс");
  100.                     lastMessages[user_id] = message_id;
  101.                 }
  102.             }
  103.         } else {
  104.             vkApi.SendMessage(user_id,PhrasesManager.WelcomePhrase);
  105.             lastMessages.Add(user_id,message_id);
  106.         }
  107.     }
  108. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement