Форум программистов, компьютерный форум, киберфорум
C#: API, боты
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.75/8: Рейтинг темы: голосов - 8, средняя оценка - 4.75
2 / 2 / 0
Регистрация: 10.04.2016
Сообщений: 27

Бот в телеграм не работает асинхронно

14.10.2023, 08:26. Показов 1931. Ответов 5
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
В методе main в консольном приложении такой участок кода, который отвечает за проведение голосования для удаления сообщения в чате.
После проведения голосования, я в асинхронном методе должен через определенный промежуток времени остановить голосование, при этом команды бот должен выполнять.

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
  Message pollMessageDel = null;
                Chat chatPollMessageDel = null;
                Message ReplyToMessage = null;
 
                if (update.Type == Telegram.Bot.Types.Enums.UpdateType.Message)
                {
                    message = update.Message;
                    if (message.Text != null && message.ReplyToMessage != null)
                    {
                        if (message.Text.ToLower() == "/голосование удалить")
                        {
 
                            chatPollMessageDel = message.Chat;
                            ReplyToMessage = message.ReplyToMessage;
 
                            if (initedChatAdmin != null)
                            {
                                if (ReplyToMessage.From.Id == initedChatAdmin.Id)
                                {
                                    await botClient.SendTextMessageAsync(chatPollMessageDel, "Это сообщение удалить нельзя");
                                    return;
                                }
                            
 
                            pollMessageDel = await botClient.SendPollAsync(chatPollMessageDel, "Удалить сообщение?", options: new[] { "Удалить", "Оставить" }, replyToMessageId: ReplyToMessage.MessageId);
                           await StopPullDelMessageAsync();
 
 
                            return;
                        }}
                    }
                }
 
 
                async Task StopPullDelMessageAsync()
                {
                    await Task.Run(() => StopPullDelMessage());
                    
                }
 
                void StopPullDelMessage()
                {
                    Thread.Sleep(1000000000);
                    Poll poll = botClient.StopPollAsync(pollMessageDel.Chat.Id, pollMessageDel.MessageId).Result;
 
                    double perCentForDel = 50;
 
                    double perCentDelMes = (100 / poll.TotalVoterCount) * poll.Options[0].VoterCount;
                    if (perCentDelMes >= perCentForDel)
                    {
                        botClient.DeleteMessageAsync(chatPollMessageDel.Id, ReplyToMessage.MessageId); //удаляет сообщения
                        botClient.SendTextMessageAsync(chatPollMessageDel, "Голосование завершено. \r Cообщение удалено ботом");
                    }
                    else
                    {
                        botClient.SendTextMessageAsync(chatPollMessageDel, "Голосование завершено. \r Сообщение не удалено");
                    }
 
                }

Вот в этом месте программа застывает

C#
1
2
  Thread.Sleep(1000000000);
                    Poll poll = botClient.StopPollAsync(pollMessageDel.Chat.Id, pollMessageDel.MessageId).Result;
Что не так?
1
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
14.10.2023, 08:26
Ответы с готовыми решениями:

Не работает телеграм бот
Есть бот , когда нажимаеш старт , он выдает только один вопрос , следующий он не выдает import random,time from datetime import date...

Телеграм бот работает не так как надо
Доброго времени суток, друзья. В общем сделал я бота и захотел, чтобы при слове привет от пользователя бот выдавал одну фразу, а при слове...

Не работает телеграм бот при работы с mysql php
У меня почему то не работает телеграм бот при добавление, или поиска пользователя в mysql php. База данных подключается корректно. Вот...

5
Эксперт .NET
 Аватар для Usaga
14078 / 9295 / 1347
Регистрация: 21.01.2016
Сообщений: 34,902
14.10.2023, 08:44
Цитата Сообщение от Stixxx Посмотреть сообщение
Что не так?
Цитата Сообщение от Stixxx Посмотреть сообщение
Thread.Sleep(1000000000);
А что тут "так"?
0
2 / 2 / 0
Регистрация: 10.04.2016
Сообщений: 27
14.10.2023, 15:55  [ТС]
Мне надо через некоторое время закрыть голосование. Я останавливаю отдельный поток, жду и закрываю голосование.
Task Delay(100000) вообще не делает задержки перед закрытием голосования
0
 Аватар для IamRain
4693 / 2701 / 734
Регистрация: 02.08.2011
Сообщений: 7,226
14.10.2023, 16:03
Ты на 277 часов блокируешь поток, пробовал подождать и проверить, завершиться ли голосование?
0
548 / 355 / 120
Регистрация: 17.08.2014
Сообщений: 1,351
15.10.2023, 09:06
Лучший ответ Сообщение было отмечено Stixxx как решение

Решение

Stixxx, Если ты хочешь чтобы метод выполнился асинхронно то надо его запускать асинхронно и не ждать выполнения, а если ты хочешь ждать то о какой тогда асинхронности вопрос await будет ждать результат выполнения(т.е асинхронный метод будет выполнятся синхронно в текущей таске, и чего мы ждем?)
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
  Message pollMessageDel = null;
                Chat chatPollMessageDel = null;
                Message ReplyToMessage = null;
 
                if (update.Type == Telegram.Bot.Types.Enums.UpdateType.Message)
                {
                    message = update.Message;
                    if (message.Text != null && message.ReplyToMessage != null)
                    {
                        if (message.Text.ToLower() == "/голосование удалить")
                        {
 
                            chatPollMessageDel = message.Chat;
                            ReplyToMessage = message.ReplyToMessage;
 
                            if (initedChatAdmin != null)
                            {
                                if (ReplyToMessage.From.Id == initedChatAdmin.Id)
                                {
                                    await botClient.SendTextMessageAsync(chatPollMessageDel, "Это сообщение удалить нельзя");
                                    return;
                                }
                            
 
                            pollMessageDel = await botClient.SendPollAsync(chatPollMessageDel, "Удалить сообщение?", options: new[] { "Удалить", "Оставить" }, replyToMessageId: ReplyToMessage.MessageId);
                           await StopPullDelMessageAsync();
 
 
                            return;
                        }}
                    }
                }
 
 
                async Task StopPullDelMessageAsync()
                {
                     Task.Run(() => StopPullDelMessage());
                    
                }
 
                async void StopPullDelMessage()
                {
                    Task.Delay(100000);
                    Poll poll = await botClient.StopPollAsync(pollMessageDel.Chat.Id, pollMessageDel.MessageId);
 
                    double perCentForDel = 50;
 
                    double perCentDelMes = (100 / poll.TotalVoterCount) * poll.Options[0].VoterCount;
                    if (perCentDelMes >= perCentForDel)
                    {
                        await botClient.DeleteMessageAsync(chatPollMessageDel.Id, ReplyToMessage.MessageId); //удаляет сообщения
                        await botClient.SendTextMessageAsync(chatPollMessageDel, "Голосование завершено. \r Cообщение удалено ботом");
                    }
                    else
                    {
                        await botClient.SendTextMessageAsync(chatPollMessageDel, "Голосование завершено. \r Сообщение не удалено");
                    }
 
                }
Добавлено через 3 минуты
И не используйте Task.Result
2
2 / 2 / 0
Регистрация: 10.04.2016
Сообщений: 27
15.10.2023, 10:50  [ТС]
Все, я догнал наконец-то! Спасибо, убрал евейт и все стало работать как надо!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
15.10.2023, 10:50
Помогаю со студенческими работами здесь

Телеграм бот в группе - установить привелегии пользователя restrictChatMember - не работает
Бот не меняет привилегии пользователя в группе. Не могу понять в чем проблемма, кто знает как исправит? $ChatPermissions = ; ...

Телеграм бот, создающий телеграм ботов с определёнными функциями
Подскажите,пожалуйста, как возможно написать телеграм бота, создающего другого тг бота на основе токена, который пользователь пошлёт. Каким...

Телеграм-бот
Скачал я бота, а он с ошибками, или просто на виндовс не работает. В общем помогите: Код бота: #!/usr/bin/python3.4 # -*- coding:...

Телеграм-бот
Добрый день! Возникло желание создать телеграм-бот интеллектуальную игру. Бота создала, а с чего начать игру не понимаю. Суть такая -...

Телеграм бот
помогите разобраться с кодом для телеграмм бота при запуске выявляется много ошибок


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru