Останні статті і огляди
Новини
Простий бот для телеграм
-
AW
Junior
Вітаю. Хочу відразу сказати, что абсолютно в цьому нічого не розумію, але хотілося б реалізувати, якщо це можливо.
Дано:
1) Відповідальна особа
2) колектив підлеглих
Що потрібно:
Раз на місяць підлеглі повинні звітувати про виконання плану робіт. Писати багато не потрібно, умовно треба лише 2 варіанта "так" та "ні" або "+" та "-" або ж червона кнопка та зелена. Щось таке.
Відповідно у відповідальної особи повинно показувати відповідь підлеглого і його ім'я, щоб можна було бачити хто виконав план а хто ні.
Чи реально таке зробити, якщо так - то як? Буду вдячний за покроковий мануал. Дякую
Дано:
1) Відповідальна особа
2) колектив підлеглих
Що потрібно:
Раз на місяць підлеглі повинні звітувати про виконання плану робіт. Писати багато не потрібно, умовно треба лише 2 варіанта "так" та "ні" або "+" та "-" або ж червона кнопка та зелена. Щось таке.
Відповідно у відповідальної особи повинно показувати відповідь підлеглого і його ім'я, щоб можна було бачити хто виконав план а хто ні.
Чи реально таке зробити, якщо так - то як? Буду вдячний за покроковий мануал. Дякую
-
pelia
Member
реально, вам навіть chatgpt напише такого бота
-
AW
Junior
pelia
Дякую за вашу увагу до мого повідомлення, але ваша відповідь не наблизила мене до реалізації задумки. Я ж одразу написав, що не розбираюся в цьому, тому конкретне питання задав - як саме це робиться.
Дякую за вашу увагу до мого повідомлення, але ваша відповідь не наблизила мене до реалізації задумки. Я ж одразу написав, що не розбираюся в цьому, тому конкретне питання задав - як саме це робиться.
-
yupi
Member
AW
SendPulse
SendPulse
-
pelia
Member
так і я не розбираюсь, але вбивши практично слово в слово ваше прохання у чатгпт я отримав відповідь. Не знаю на скільки воно працює, але теоретично повинноAW: ↑ 04.06.2024 10:25 pelia
Дякую за вашу увагу до мого повідомлення, але ваша відповідь не наблизила мене до реалізації задумки. Я ж одразу написав, що не розбираюся в цьому, тому конкретне питання задав - як саме це робиться.
-
Dremjke
Member
- Звідки: Україна
Краще переведись на іншу кафедру або факультет, на спецальність, яка тобі ближче до душі буде. Потім сам собі за це рішення подякуєш.AW: ↑ 04.06.2024 10:25Дякую за вашу увагу до мого повідомлення, але ваша відповідь не наблизила мене до реалізації задумки. Я ж одразу написав, що не розбираюся в цьому, тому конкретне питання задав - як саме це робиться.
-
AW
Junior
Та я вже зрозумів що форумом помилився.Dremjke: ↑ 04.06.2024 11:27Краще переведись на іншу кафедру
Пошукаю щось інше ближче до теми де у учасників буде більше бажання допомогти.
Мінусів напхали наче я якийсь спамер чи люто правила порушую
Можна тему закрити.
-
pelia
Member
Ну типу, пояснювати як chatgpt користуватись чи що?
- спойлер
- https://chat.openai.com/
Далі підправляємо те що не подобається, додаємо хотілки і отримуємо кінцеву відповітьмені потрібен telegram бот, котрий кожен місяць буде запитувати у певних користувачів їх ім'я та прізвище і задавати кілька питань, на котрі повинна бути відповіть "так" або "ні", ці дані бот повинен записувати у гугл таблицю, створюючи колонку з новим місяцем після кожного опитуванняСтворити телеграм-бота:
Зареєструвати бота через BotFather у Telegram та отримати токен доступу.
Встановити необхідні бібліотеки:
python-telegram-bot для роботи з Telegram API.
gspread для роботи з Google таблицями.
oauth2client для аутентифікації в Google API.
Налаштувати доступ до Google таблиць:
Створити проект у Google Cloud Console та включити Google Sheets API.
Створити сервісний аккаунт та згенерувати ключ JSON.
Надати доступ до таблиці сервісному аккаунту.
Написати код бота:
Реалізувати опитування користувачів.
Зберігати дані у Google таблиці.
Нижче наведено приклад коду для реалізації такого бота:
Приклад коду
Інсталяція бібліотек:Створення бота:Код: Виділити все
pip install python-telegram-bot gspread oauth2client
Пояснення кодуКод: Виділити все
from telegram import Update, InlineKeyboardButton, InlineKeyboardMarkup from telegram.ext import Updater, CommandHandler, MessageHandler, Filters, CallbackContext, ConversationHandler, CallbackQueryHandler import gspread from oauth2client.service_account import ServiceAccountCredentials import datetime # Авторизація у Google Sheets scope = ["https://spreadsheets.google.com/feeds", "https://www.googleapis.com/auth/drive"] creds = ServiceAccountCredentials.from_json_keyfile_name("path/to/your/service_account.json", scope) client = gspread.authorize(creds) # Відкрити таблицю за назвою sheet = client.open("Telegram Survey").sheet1 # Стан для розмови NAME_SURNAME, QUESTION = range(2) def start(update: Update, context: CallbackContext) -> int: # Перевірка, чи вже відомі ім'я та прізвище користувача user_id = update.message.from_user.id user_data = context.user_data.get(user_id) if user_data: ask_question(update, context) return QUESTION else: update.message.reply_text('Введіть, будь ласка, ваше ім\'я та прізвище:') return NAME_SURNAME def name_surname(update: Update, context: CallbackContext) -> int: user_id = update.message.from_user.id context.user_data[user_id] = {'name_surname': update.message.text} ask_question(update, context) return QUESTION def ask_question(update: Update, context: CallbackContext) -> None: keyboard = [ [ InlineKeyboardButton("✅", callback_data='так'), InlineKeyboardButton("❌", callback_data='ні') ] ] reply_markup = InlineKeyboardMarkup(keyboard) update.message.reply_text('Чи задоволені ви нашими послугами?', reply_markup=reply_markup) def button(update: Update, context: CallbackContext) -> None: query = update.callback_query user_id = query.from_user.id query.answer() context.user_data[user_id]['question'] = query.data # Отримати поточний місяць current_month = datetime.datetime.now().strftime("%B %Y") # Перевірити, чи існує стовпець для поточного місяця headers = sheet.row_values(1) if current_month not in headers: sheet.update_cell(1, len(headers) + 1, current_month) headers.append(current_month) # Знайти або додати користувача all_records = sheet.get_all_records() name_surname = context.user_data[user_id]['name_surname'] row_index = None for i, record in enumerate(all_records, start=2): if record.get('ім\'я та прізвище') == name_surname: row_index = i break if row_index is None: row_index = len(all_records) + 2 sheet.update_cell(row_index, 1, name_surname) # Оновити відповідь col_index = headers.index(current_month) + 1 sheet.update_cell(row_index, col_index, context.user_data[user_id]['question']) # Застосувати форматування до комірки cell = sheet.cell(row_index, col_index) if context.user_data[user_id]['question'] == 'так': sheet.format(cell.address, {"backgroundColor": {"red": 0.0, "green": 1.0, "blue": 0.0}}) else: sheet.format(cell.address, {"backgroundColor": {"red": 1.0, "green": 0.0, "blue": 0.0}}) query.edit_message_text(text="Дякуємо за відповіді!") def cancel(update: Update, context: CallbackContext) -> int: update.message.reply_text('Опитування скасовано.') return ConversationHandler.END def main() -> None: updater = Updater("YOUR_TELEGRAM_BOT_TOKEN") dispatcher = updater.dispatcher conv_handler = ConversationHandler( entry_points=[CommandHandler('start', start)], states={ NAME_SURNAME: [MessageHandler(Filters.text & ~Filters.command, name_surname)], QUESTION: [CallbackQueryHandler(button)], }, fallbacks=[CommandHandler('cancel', cancel)], ) dispatcher.add_handler(conv_handler) updater.start_polling() updater.idle() if __name__ == '__main__': main()
Авторизація та підключення до Google таблиці:
Встановлюємо авторизацію через gspread та відкриваємо таблицю.
Обробка команд:
Команда /start ініціалізує процес опитування.
Якщо користувач вже надав ім'я та прізвище, пропускаємо цей крок і переходимо до питання.
Запитуємо питання з відповіддю "так" або "ні" через кнопки з emoji.
Збереження даних:
Отримуємо поточний місяць і перевіряємо, чи є відповідний стовпець у таблиці. Якщо ні, додаємо його.
Перевіряємо, чи існує рядок для даного користувача (ім'я та прізвище). Якщо ні, додаємо новий рядок.
Оновлюємо відповідь користувача в потрібному стовпці.
Форматування комірок:
Застосовуємо зелений фон для відповіді "так" і червоний фон для відповіді "ні".
Цей код забезпечує зручний інтерфейс для користувачів, дозволяючи їм відповідати на питання за допомогою кнопок з emoji, а також забезпечує збереження та форматування даних у таблиці.
-
7mindfields
Member
pelia
Ти не зрозумів, потрібен перевірений безкоштовний покроковий гайд як це зробити людині, яка в цьому не розбирається
і не планує розбиратися
Ти не зрозумів, потрібен перевірений безкоштовний покроковий гайд як це зробити людині, яка в цьому не розбирається
і не планує розбиратися
-
pelia
Member
так і я ніби не сильно розбираюсь7mindfields: ↑ 04.06.2024 14:49 pelia
Ти не зрозумів, потрібен перевірений безкоштовний покроковий гайд як це зробити людині, яка в цьому не розбирається
і не планує розбиратися
-
Dremjke
Member
- Звідки: Україна
Ти не форумом помилився, а кафедрою, де навчаєшся. Всеодно потім не будеш по спеціальності працювати, то навіщо зря час витрачати.AW: ↑ 04.06.2024 14:36Та я вже зрозумів що форумом помилився.
За безкоштовно ніхто тобі нічого робити не буде. Або готуйся платити гроші за виконану роботу, або розбирайся сам. Нема такого коду чи конфіга, якого не було б на Stack Overflow. А ще кращий варіант запропонував pelia, то взагалі ультимативне рішення, я сам часто chat GPT по роботі використовую. Аби ця штука була, коли я навчався, то був би відмінником на стипендії
-
yupi
Member
Я написал ресурс, где самому с нулем знаний можно создать бота
-
pelia
Member
ну, їх боти ніби не вміють записувати кудись далі їхньої срм, котра вже не безкоштовна і доволі крива, зовсім нещодавно мав з ними проблемиyupi: ↑ 05.06.2024 19:47 Я написал ресурс, где самому с нулем знаний можно создать бота
-
yupi
Member
pelia
Для первого опыта с нулем знаний можно опробовать и их
Для первого опыта с нулем знаний можно опробовать и их