Решил попробовать написать своего первого бота (надеюсь не последнего) для Vk, используя VKNet и на языке C#. Найдя несколько гайдов, я приступил к его разработке: создал группу, приложение, получил токены и тд и тп.
Трудность с которой я столкнулся состоит в том, что бот постоянно шлёт сообщения. В представленном ниже коде, я задаю условие: если полученное событие является новым сообщением, но при этом оно не является исходящим сообщением, то уже отправить написавшему "test". Я создал переменную replyMessage, которая показывает является ли событие исходящим сообщением, и вывожу её в консоль. Значение переменной всегда False, хотя новое сообщение только одно -- моё, остальные сообщения от бота. Скорее всего нужно использовать как-то уникальные модификаторы сообщений (которые задаются случайно), но я не могу догадаться как. Пожалуйста, помогите с решением проблемы безостановочной отправки сообщений ботом.
public static void SendMessage(string message, long? userID, long? PeerID, long? ChatID, VkApi api)
{
Random rnd = new Random();
int RandomID = rnd.Next();
api.Messages.Send(new MessagesSendParams
{
RandomId = RandomID,
UserId = userID,
PeerId = PeerID,
ChatId = ChatID,
Message = message
});
}
static void Main(string[] args)
{
var api = new VkApi();
Random testran = new Random();
api.Authorize(new ApiAuthParams() { AccessToken = MyAppToken });
var s = api.Groups.GetLongPollServer(MyGroupId);
while (true)
{
try
{
var poll = api.Groups.GetBotsLongPollHistory(
new BotsLongPollHistoryParams()
{ Server = s.Server, Ts = s.Ts, Key = s.Key, Wait = 25});
if (poll?.Updates == null) continue;
foreach (var a in poll.Updates)
{
bool replyMessage = (a.Type == GroupUpdateType.MessageReply);
long? peerID = a.Message.PeerId;
long? userID = a.Message.FromId;
long? chatID = a.Message.ChatId;
if (a.Type == GroupUpdateType.MessageNew)
{
SendMessage("test", userID, peerID, chatID, api);
Console.WriteLine(replyMessage);
}
//bool t = (a.Type == GroupUpdateType.MessageNew);
//if (a.Type == GroupUpdateType.MessageReply)
//{
// Console.WriteLine(t);
// continue;
//}
//if (t)
//{
// long? peerID = a.Message.PeerId;
// long? userID = a.Message.FromId;
// long? chatID = a.Message.ChatId;
// api.Messages.MarkAsRead(peerID.ToString());
// if (a.Message.Text == "лох")
// SendMessage("g", userID, peerID, chatID, api);
//}
//if (a.Type == GroupUpdateType.MessageReply)
// break;
//if (a.Type != GroupUpdateType.MessageReply)
//{
// if (a.Type == GroupUpdateType.MessageNew)
// {
// long? peerID = a.Message.PeerId;
// long? userID = a.Message.FromId;
// long? chatID = a.Message.ChatId;
// //long? messID = a.Message.ConversationMessageId;
// //long? RandomID = ;
// string userMessage = a.Message.Text;
// // Console.WriteLine("user is {0} and message is: {1}", a.Message.PeerId, userMessage);
// SendMessage("@" + userID, chatID, peerID, chatID, api);
// }
//}
//continue;
//long? peerID = a.Message.PeerId;
//long? userID = a.Message.UserId;
//long? chatID = a.Message.ChatId;
//long? messID = a.Message.ConversationMessageId;
//long? RandomID = a.Message.RandomId;
//if ((userMessage == "1") && ((check[0] != check[1]) || (check[1] == null)))
//{
// SendMessage("я сосал", userID, peerID, chatID, api);
// check[1] = check[0];
// //api.Messages.MarkAsRead(peerID.ToString(), messID);
//}
//else
// check[1] = check[0];
}
// continue;
}
catch (LongPollException exception)
{
if (exception is LongPollOutdateException outdateException)
s.Ts = outdateException.Ts;
else
{
s = api.Groups.GetLongPollServer(MyGroupId);
}
}
catch (Exception e)
{
Console.WriteLine(e.Message);
// }
// }
}
}
}
}
}
Всё оказалось довольно просто. Заводим переменную s в цикле
static void Main(string[] args)
{
var api = new VkApi();
Random testran = new Random();
api.Authorize(new ApiAuthParams() { AccessToken = MyAppToken });
while (true)
{
try
{
var s = api.Groups.GetLongPollServer(MyGroupId);
var poll = api.Groups.GetBotsLongPollHistory(
new BotsLongPollHistoryParams()
{ Server = s.Server, Ts = s.Ts, Key = s.Key, Wait = 25});
if (poll?.Updates == null) continue;
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Хотите улучшить этот вопрос? Переформулируйте вопрос так, чтобы на него можно было дать ответ, основанный на фактах и цитатах
Почему у меня высвечивается ошибка с индексом: Array index is out of range
Есть необходимость получить объект типа dynamic из Json наNET Core 3
Проблема в том что DataGrid после удаления из коллекции (ObservableCollection) какого то слова, в DataGrid коллекция остается не измененнымРаботает в другом...