Как обрабатывать входящие сообщения пользователя (так же такие события как, к примеру, смена аватарки беседы и т.п.) · vknet/vk · Discussion #1108 (original) (raw)
Здесь можно посмотреть коды событий
Здесь и Здесь можно посмотреть готовые обертки обработки входящих сообщений для пользователя и группы соответственно
Класс обработчика:
class VKMessageManager { private VkApi_api=newVkApi(); private ulongts; private ulong? pts;
//Событие для уведомления о новом сообщенииpublic event Action<Message, User> OnNewMessage;
public VKMessageManager()
{
//Авторизуемся с учетной записью пользователя.
//Для обхода блокировки сообщений используем ApplicationId какого-нибудь официально зарегистрированного приложения
//либо используем Bypass. В примере ApplicationId приложения Kate Mobile.
_api.Authorize(new ApiAuthParams() {
ApplicationId = 2685278,
Login = "login", //email или телефон
Password = "password", //пароль от учетной записи
Settings = Settings.All //берем полный доступ
});
}
public void StartMessagesHandling()
{
//Соединяемся с сервером Long Poll запросов и получаем необходимые ts и pts
LongPollServerResponse longPoolServerResponse = _api.Messages.GetLongPollServer(needPts: true);
ts = Convert.ToUInt64(longPoolServerResponse.Ts);
pts = longPoolServerResponse.Pts;
//В отдельном потоке запускаем метод, который будет постоянно опрашивать Long Poll сервер на наличие новых сообщений
new Thread(LongPollEventLoop).Start();
}
public void LongPollEventLoop()
{
//Запускаем бесконечный цикл опроса
while (true) {
//Отправляем запрос на сервер
LongPollHistoryResponse longPollResponse = _api.Messages.GetLongPollHistory(new MessagesGetLongPollHistoryParams() {
Ts = ts,
Pts = pts,
Fields = UsersFields.Photo100 //Указывает поля, которые будут возвращаться для каждого профиля. В данном примере для каждого отправителя сообщения получаем фото 100х100
});
//Получаем новый pts
pts = longPollResponse.NewPts;
//Здесь пробегаемся по массиву событий
for (int i = 0; i < longPollResponse.History.Count; i++) {
//И обрабатываем код события
switch (longPollResponse.History[i][0]) {
//Код 4 - новое сообщение
case 4:
//Здесь логика обработки сообщения
//К примеру, возбуждаем (ахх~) событие
OnNewMessage?.Invoke(
longPollResponse.Messages[i],
longPollResponse.Profiles
.Where(u => u.Id == longPollResponse.Messages[i].FromId)
.FirstOrDefault()
);
//longPollResponse.Messages[i] - сообщение
//longPollResponse.Profiles.Where(u => u.Id == longPollResponse.Messages[i].FromId).FirstOrDefault() - отправитель сообщения
break;
}
}
}
}}
Использование:
//В консольном приложении этот код помещается в public static void Main()VKMessageManager manager = new VKMessageManager(); manager.OnNewMessage += (message, sender) => { //Обрабатываем входящее сообщение }; manager.StartMessagesHandling();