Задать вопрос
@Nika980

Как отследить пользователей телеграм бота, написанного на python и где взять их Id?

Раннее я уже задавала что-то подобное, мой вопрос был не совсем понят. В общем, я не знаю кто запустил моего бота, написанного на Python, я где-то читала, что чтобы сделать рассылку всем пользователям бота, нужно знать id каждого, но я не знаю, кто запустил моего бота и как посмотреть их id. Хотелось бы узнать куда это заносится/где хранится/как вывести
  • Вопрос задан
  • 1469 просмотров
Подписаться 1 Простой Комментировать
Пригласить эксперта
Ответы на вопрос 1
Vindicar
@Vindicar
RTFM!
Выше уже ответили, что нужно регистрировать пользователей самостоятельно. Я опишу один из способов, как это сделать.
Я предполагаю, что используется СУБД Sqlite, хотя это можно адаптировать и к другим.
Нам потребуется таблица пользователей примерно такого вида:
import time
import sqlite

connection = sqlite3.connect('bot.db')
cursor = connection.cursor()
cursor.execute("""CREATE TABLE IF NOT EXISTS users ( -- всё что после -- комментарий SQL
    id TEXT PRIMARY KEY, -- идентификатор пользователя, он же первичный ключ таблицы
    first_use REAL, -- метка времени, когда пользователь впервые обратился к боту
    last_use REAL -- метка времени, когда пользователь последний раз обратился к боту
)""")
cursor.close()

То, что мы сделали id первичным ключом, гарантирует, что одному пользователю будет соответствовать только одна строка таблицы.
Тогда перед выполнением каждой команды нужно обновить эту таблицу - добавить строку, если её нет, или обновить поле last_use, если она есть. К счастью, существует синтаксис, позволяющий сделать это за один запрос.
def ensure_user_stats(user_id):
    "Эта функция обновляет таблицу users, и должна вызываться в начале обработки каждой команды."
    global connection
    cursor = connection.cursor()
    now = time.time()
    # пытаемся добавить строку с указанным id, и фиксируем текущее время в полях first_use и last_use 
    # если возникает конфликт в поле id (такое id уже есть),
    # то мы обновляем в этой записи поле last_use на текущее время, а остальное не трогаем
    cursor.execute("""INSERT INTO users (id, first_use, last_use) VALUES (?, ?, ?)
    ON CONFLICT (id) DO UPDATE SET last_use = excluded.last_use""", (user_id, now, now))
    cursor.close()
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы