Форум программистов, компьютерный форум, киберфорум
Java: API, боты
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 Аватар для SadiQ228
-4 / 24 / 7
Регистрация: 16.12.2016
Сообщений: 716

заплёты с сессией (как я понял) в ТелеграмБоте

28.03.2020, 02:00. Показов 2540. Ответов 0
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Вообщем простые примеры из видео у меня отрабатывают, на слово привет, бот отвечает приветом.
Есть один сайтец, куда я посылаю запрос и получаю JSON ответ, JSON парсю на события, далее некоторые из этих событий мне надо отправить юзеру отбратно.

Вот так я получаю JSON, обрабатываю его, парсю, нужные события в коллекцию и возвращаю:
Java
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
public class EventsHandler {
 
    public static List<EventToSend> getEvents() throws IOException {
        URL url = null;
        Scanner scanner = null;
        StringBuilder sb = new StringBuilder();
        List<EventToSend> eList = new ArrayList();
        
        try {
            url = new URL("https://www.ex.ru/rest/limit=all");
            scanner = new Scanner((InputStream) url.getContent());
        } catch (MalformedURLException e) {
            e.printStackTrace();
        }
        
        
        while(scanner.hasNext()) {
            sb.append(scanner.nextLine());
        }
        
        Gson gson = new Gson();
        Response response = gson.fromJson(sb.toString(), Response.class);
        
        for(int i =0; i < response.getEvents().size(); i++) {
            EventToSend ets;
            Event tmp = response.getEvents().get(i);
            if(tmp.getHomePrice() > (Double)2.0 && tmp.getAwayPrice() > (Double)2.0) {
                ets = new EventToSend();
                ets.setDate(tmp.getDate());
                ets.setEventName(tmp.getName());
                ets.setLeagueName(tmp.getLeague().getName());
                ets.setLeagueRegion(tmp.getLeague().getRegion());
                ets.setSport(tmp.getLeague().getSport().getName());
                ets.setOdds(tmp.getOdds());
                eList.add(ets);
            }
        }
        System.out.println("eList "+ eList.size());
        return eList;
    }
    
}
а вот так вот я пробую отослать юзеру на его запрос нужные события:

Java
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
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
public class Bot extends TelegramLongPollingBot{
    
    List<EventToSend> validEvents;
 
    
    /**
     * Метод для приема сообщений.
     * @param update Содержит сообщение от пользователя.
     */
    @Override
    public void onUpdateReceived(Update update) {
        Message message = update.getMessage();
        if(message != null && message.hasText()) {
            switch(message.getText()) {
            case "/help":
                sendMsg(message, "Помощь");
                break;
            case "/settings":   
                sendMsg(message, "Настройки");
                break;
            case "EVENTS":
                try {
                    validEvents = EventsHandler.getEvents();
                    System.out.print("eSize: "+validEvents.size());
                } catch (IOException e) {
                    e.printStackTrace();
                }
                if(validEvents.size() != 0)
                    for(int i=0; i < validEvents.size(); i++) {
                        sendMsg(message, validEvents.get(i).toString());
                        System.out.print(validEvents.get(i).toString());
                    }
                else
                    sendMsg(message, "no events today :(");
                break;
            default:
                sendMsg(message, "hello");
                break;
            }
        }
    }
    
    public synchronized void sendMsg(Message message, String text) {
        SendMessage sendMessage = new SendMessage();
        sendMessage.enableMarkdown(true);                        //возможность разметки
        sendMessage.setChatId(message.getChatId().toString());   //устанавливает id чата (кому отвечать)
        sendMessage.setReplyToMessageId(message.getMessageId()); //устанавливает id сообщения (на какое сообщение отвечать)
        sendMessage.setText(text);
        try {
            setButtons(sendMessage);
            execute(sendMessage);
        } catch (TelegramApiException e) {
            e.printStackTrace();
        }
    }
    
    
    public synchronized void setButtons(SendMessage sendMessage) {
        ReplyKeyboardMarkup replyKeyboardMarkup = new ReplyKeyboardMarkup();  // Создаем клавиуатуру
        sendMessage.setReplyMarkup(replyKeyboardMarkup);                      // Устанавливаем разметку для клавиатуры, связываем сообщение с клавой
        replyKeyboardMarkup.setSelective(true);                               // Выводит клавиатуру определенным юзерам или всем
        replyKeyboardMarkup.setResizeKeyboard(true);                          // Ресайз под количество кнопок
        replyKeyboardMarkup.setOneTimeKeyboard(false);                        // Скрывать ли клаву после нажатия кнопки
        
        List<KeyboardRow> keyboard = new ArrayList<>();                       // Создаем список строк клавиатуры
        
        KeyboardRow keyboardFirstRow = new KeyboardRow();                     // Первая строчка клавиатуры
        keyboardFirstRow.add(new KeyboardButton("/help"));                    // Добавляем кнопки в первую строчку клавиатуры
        keyboardFirstRow.add(new KeyboardButton("/settings")); 
 
        KeyboardRow keyboardSecondRow = new KeyboardRow();                    // Вторая строчка клавиатуры
        keyboardSecondRow.add(new KeyboardButton("EVENTS"));              // Добавляем кнопки во вторую строчку клавиатуры
 
        keyboard.add(keyboardFirstRow);
        keyboard.add(keyboardSecondRow);
        replyKeyboardMarkup.setKeyboard(keyboard);                            // и устанваливаем этот список нашей клавиатуре
    }
 
    @Override
    public String getBotUsername() {
        return "ччч";
    }
 
    @Override
    public String getBotToken() {
        return "ччч";
    }
 
}

Все встает на строке
Java
1
validEvents = EventsHandler.getEvents()
строка
Java
1
System.out.print("eSize: "+validEvents.size())
просто не выводится в консоль. Ошибок и предупреждений нету.
Начал отлаживать:
в момент, пока массив перебирает все ивенты, в какой то момент отладка перекидывает меня в класс
Java
1
public class DefaultBotSession implements BotSession
, а в нем уже указывает на приватный класс:
Java
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
private class HandlerThread extends Thread implements UpdatesHandler {
        @Override
        public void run() {
            setPriority(Thread.MIN_PRIORITY);
            while (running.get()) {
                try {
                    List<Update> updates = getUpdateList();
                    if (updates.isEmpty()) {
                        synchronized (receivedUpdates) {
                            receivedUpdates.wait();
                            updates = getUpdateList();
                            if (updates.isEmpty()) {
                                continue;
                            }
                        }
                    }
                    callback.onUpdatesReceived(updates);
                } catch (InterruptedException e) {
                    log.debug(e.getLocalizedMessage(), e);
                    interrupt();
                } catch (Exception e) {
                    log.error(e.getLocalizedMessage(), e);
                }
            }
            log.debug("Handler thread has being closed");
        }
    }
}
именно на строку
Java
1
receivedUpdates.wait();
кто сталкивался? не могу найти хотя бы примерного решения в инете.

Добавлено через 8 минут
не понмиаю откуда ваще сессия берется если мы юзаем id юзера вместо сессии
каждый запрос statles
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
28.03.2020, 02:00
Ответы с готовыми решениями:

Как работать с чужой сессией?
Как из php достать данный чужой сессии, ориентируясь по ключу....?

Как убить файлы, созданные сессией?
Стартуем сессию и в определенной папке создаются ее служебные файлы. Со временем их там накапливается очень много. Можно ли как-то...

Собирался покупать gtx 580, но по разным статьям в инете понял, что GTX 760 мощнее? Или я неправильно понял?
Привет всем. Сегодня решил собрать новый системный блок. ПРоц уже есть - Core i5-2380P, ОЗУ 8 гб CorsAir 1333 Собирался покупать gtx...

0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
28.03.2020, 02:00
Помогаю со студенческими работами здесь

Советы понял, "но ничего не понял!"
Скажите пожалуйста, какие ошибки, что можно исправить (если нет, то какую смерть проще принять?), и как бороться за НЧ ( ссылку...

Как настроить сервер для работы с Сессией?
У меня такой вот вопрос! При переходе от ASP к PHP необходимо воплотить работу с сессией. Я написал такой вот код: &lt;?php ...

Как проверить занята строка другой сессией или нет?
Собственно вопрос в заголовке. Как мне UPDAT'ом не наткнутся на занятую строку и не зависнуть на месте? А просто сообщить, что строка занята


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

Или воспользуйтесь поиском по форуму:
1
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11680&amp;d=1772460536 Одним из. . .
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
SDL3 для Web (WebAssembly): Сборка библиотек: SDL3, Box2D, FreeType, SDL3_ttf, SDL3_mixer и SDL3_image из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual Studio. . . .
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru