Skip to content

Instantly share code, notes, and snippets.

@nOy39
Last active June 10, 2018 12:19
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save nOy39/8da04676eb08cb00a3dbdf3e24bc8385 to your computer and use it in GitHub Desktop.
Save nOy39/8da04676eb08cb00a3dbdf3e24bc8385 to your computer and use it in GitHub Desktop.
Бот сохраняет вопросы задаваемые пользователями канала в БД, и при обращении к нему выдает список вопросов, при ответе на них у задающего
вопрос будет возможность установить сатус вопрос решен, он будет сохранен в БД, и затем можно будет обратиться к этому вопросу
и посмотреть его решение, также это добавляет к карме отвечающего, и возможно дает ему какие-нибудь ачивки.
Бот сохраняет каждого пользователя в свою базу, при написании своего первого сообщения пользователя в чат.
В телеграмме пользователи могут менять имя, фамилию, юзернейм, т.е. может получиться что пользователь для бота будет новым чуваком,
поэтому во всех операциях сравнения, поиска и обращений к бд где указывается пользователь, за ключ берется telegram.user.id.
он уникальный. Также если юзер меняет свой ник, имя, фамилию то бот в фоне обновит эти данные в таблице.
все вопросы записываются в БД только если перед вопросом стоит условный #ТЭГ вопроса, вопрос записывается в базу со статусом не решенный и
в поле user_id пишется пользователь который его задал, вопрос может быть забанен, и тогда автор вопроса получит минус к своей карме.
Ответы на вопросы записываются просто перехватом reply сообщений в теле которых есть вопрос из бд.
Ответов на один вопрос может быть много, подходящий ответ выберет автор вопроса сам, нажав условную кнопку "МНЕ ЭТО ПОДХОДИТ",
#вопрос Неработает метод, вываливается ошибка бля помогите. ТЕкст всякий дребедень, еще маленько букв
потом какая нибудь страка из стек-трейса, вот эта например
ava.lang.NullPointerException: null
at org.a2lpo.letsCodeBot.components.Bot.onUpdateReceived(Bot.java:70) ~[classes/:na]
at java.util.ArrayList.forEach(ArrayList.java:1257) ~[na:1.8.0_172]
at org.telegram.telegrambots.generics.LongPollingBot.onUpdatesReceived(LongPollingBot.java:27) ~[telegrambots-meta-3.5.jar:na]
at org.telegram.telegrambots.updatesreceivers.DefaultBotSession$HandlerThread.run(DefaultBotSession.java:306) ~[telegrambots-3.5.jar:na]
еще ссылку въебем для красоты сообщения
https://gist.github.com/nOy39/8da04676eb08cb00a3dbdf3e24bc8385/edit
вот типа такого)))). ПАМАГИТЕ ЛЮДИ ДОБРЫЕ!
Резюме:
Так как Андрей не уточнял какого бота создавать я взял бота longPollingBots.
А также я решил внедрить его в Spring-Boot, чтобы в дальнейшем побаловавшись с ним в меру
внедрить своего бота в свое веб-приложение)))
Я форкнул Репозиторий: https://github.com/drucoder/letsCodeBot и выгружаю свои коммиты в
https://github.com/nOy39/letsCodeBot/tree/user_questions каждый день, примерно в 19:00 МСК
Сам бот называется @alpo_jbot, создал свою группу для теста https://t.me/joinchat/FH6tOQ4nXFKmU4UcuoliUw
Сейчас бот крутиться на herouku деплой на него я делаю по вечерерам, по-этому все изменения в работе бота будут после 19-00
20-00 МСК, в ближайшее время задеплою его на свой vps сервер.
messageText = "Привет, ты пишешь всякого разного рода сообщения, но они теряется в общем чате?\uD83D\uDD0D \n" +
"Я готов тебе помочь с этим, я могу сохранить твой вопрос.\uD83D\uDCDD \n" +
"После этого каждый желающий сможет его посмотреть, не роясь в дебрях истории.\uD83D\uDCA1 \n" +
" Правда для этого ты должен будешь выполнить несколько моих условий:\n" +
"<b>1.</b> Для того чтобы я мог различать твое обычное общение от вопроса к сообществу," +
"твой вопрос должен начинаться с тега: <code>#вопрос</code> <em>ПРОБЛЕМЫ...</em> .\n" +
"<b>2.</b> Твой вопрос должен содержать более <b>50</b> символов. менее 50 сиволов вопросы вот <a href=\"http://www.google.com/\">сюда.</a>\n " +
"<b>3.</b> Так как вопросов может оказаться очень много, я не хочу вываливать портянку все вопросов, чтобы засорять экраны пользователей.\n" +
"Я буду отображать вопросы по заголовкам. Отсюда вытекает 4 правило." +
"<b>4.</b> Не начинай свой вопрос <em>ПАМАГИТЕ!!!</em>,\n<em>ПРОБЛЕМЫ...</em>\n<em>2018-06-06 19:21:09.506 ERROR 15928 --- [nio-8080-exec-8]</em>\n" +
" прояви уважения к людям которые тебе будут помогать в решении твоей проблемы, начни свой вопрос так," +
" чтобы люди увидели по заголовку твоего вопроса какого рода у тебя проблема." +
"Пример: <em>Ошибка NullPointerException в методе</em>,<em>Проблема с БД Postgres</em>\n" +
"<b>5.</b> Никогда не выкладывай сюда 'портянки' логов или кода, не поленись выложить это в <a href=\"https://gist.github.com/\">Gist.</a> и добавить в свой вопрос ссылку.\n" +
"<b>6.</b> Отблагодари автора ответа, чей ответ тебе помог.\n" +
"<b>7.</b> Если знаешь ответ на чей то вопрос, или просто хочешь помочь в решении, ведь иногда коллективно решаются проблемы," +
"просто цитируй вопрос, я сам их отсортирую для дальнейшего отображения.";
Вопросы принимаются в текстовом виде, загрузку изображений прикрепленных к определенному вопросу, пока реализовать не могу.
Ни какой веб морды на данный момент для бота я не делаю.
@nOy39
Copy link
Author

nOy39 commented Jun 6, 2018

Коментируйте, критикуйте, тестируйте....

@nOy39
Copy link
Author

nOy39 commented Jun 7, 2018

Как говориться утро вечера мудреней) вчера вечером сделал функцию ответа на вопрос, а ночью проснулся посс.... хм... просто проснулся, и решил переделать технологию "задавания" вопроса, т.е. задающему не нужно будет тыкать команды /q_КОМАНДА так как это не удобно, просто вначале вопроса будет ставить какой-нибудь условный тэг #пАмАгите или #еще #чего-нибудь и вопрос будет сохранен в БД, а также посмотрев на бота Артема (@onehorned), я решил убрать командные функции которые были(/КОМАНДА_БОТ_СДЕЛАЙ_МНЕ_ЧТО-НИБУДЬ) на кнопки, так как это будет более юзеро-френдный интерфейс

@nOy39
Copy link
Author

nOy39 commented Jun 7, 2018

а также интересно было бы сделать тэги для вопросов, но тут Я реализацию не знаю как лучше сделать на уровне таблиц, а так как я тут сам с собой разговариваю, то Я пока занят, чтобы подумать как это реализовать и ответить себе))))

@nOy39
Copy link
Author

nOy39 commented Jun 7, 2018

а также выяснилось что когда бот в канале то у него нету кнопок

@nOy39
Copy link
Author

nOy39 commented Jun 7, 2018

появился первый живой тестер)))))

@nOy39
Copy link
Author

nOy39 commented Jun 7, 2018

Короче Herouku ребята "клёвые", но бот у них работает не долго, решил не заморачиваться на этом и если завтра будет хорошо со временем, то залью его на сервак и можно будет в бета тест запустить.
Сегодня сделал кнопки, типа основное меню, хочу внедрить InlineKeyboardReply чтобы в сообщениях которые пишет бот не тыкать /details. да-да-да остались еще такие команды "а-ля Баба Зина с одноклассников" понимаю что дико не юзер френдли, но прохахатывать время на интеграцию таких кнопок не хочу пока, на сегодняшний день бот сохраняет вопросы перед которыми стоит #вопрос, имеет 4 кнопки KeyboardReply(внизу)

СПИСОК ВОПРОСОВ

  • показывает список всех вопросов,

СПИСОК МОИХ ВОПРОСОВ

, не буду объяснять что это такое,

ПОМОЩЬ

-тоже не буду объяснять)))
Также добавленна возможность отвечать на вопросы, решил голову не ломать и сделал отвветы на вопросы из бд, делаются просто через reply - там перехватываем update.getMessage.getReplyFromTo и его рапарсиваем, вроде работает, в базу пишет.

@nOy39
Copy link
Author

nOy39 commented Jun 8, 2018

Какие-то глюки с каналом у меня, чат-канал с ботом был создан до появления кнопок и у меня их в нем нет... ладно короче забил на этот глюк, пока... сделал список ответов, сортировку вопроса по популярности( взял за критерий популярности отвевты на вопрос), сделал новвый коммит, следующий этап открытие вопроса из списка и отображение кнопок в InlineKeybordReply в теле сообщения....
Ну понеслась....

@nOy39
Copy link
Author

nOy39 commented Jun 8, 2018

Фууууххх короче внедрил InlineButtons в тело получаемых сообщений, пока внедрил кнопу like, dislike, посмотреть ответы на конкретный вопрос, принять ответ, в теле сообщений остались еще /команды, примерно представляю как их заменить на маленькие кнопочки, но тема такая, что там команды проставляются при создании строки чере StringBuilder.sb.append и кнопки походу ни как там не вживить... я думаю, что последняя хуйня которой я буду заниматься, осталось маленько сделать по основной теме сохранения, потом заканчиваю лайки и карму юзеров, дальше веб-морду думаю натягивать... как то так))) очередной коммит сделал, https://github.com/nOy39/letsCodeBot/tree/answer_list_details кому надо смотрите... хотя тут нету никого бля...)))

@nOy39
Copy link
Author

nOy39 commented Jun 8, 2018

image

![Uploading image.png…](скрины гребаные)

@nOy39
Copy link
Author

nOy39 commented Jun 8, 2018

image

@nOy39
Copy link
Author

nOy39 commented Jun 8, 2018

ушёл смотреть игру престолов...

@nOy39
Copy link
Author

nOy39 commented Jun 10, 2018

Бот готов, ну как готов, основная суть бота готова, просмотр вопросов, задавание вопросов, ответы, списки, сегодня деплой на сервер, с понедельника делаю лайки, и ставлю всякие блокировочки

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment