Загрузка...

Массовая рассылка ТГ Бот

Тема в разделе Python создана пользователем romanespit 20 окт 2020. 1311 просмотров

  1. romanespit
    romanespit Автор темы 20 окт 2020 https://t.me/romahorny - смешинки для души 8933 19 дек 2019
    Приветствую. Пытаюсь разобраться в Python и пишу бота для телеграм.
    Суть проблемы: Достаю из БД записанные ранее ID для массовой рассылки какого-либо объявления, но видимо что-то накосячил с парсингом и он выдаёт данные со скобками и запятыми, помогите. Как грамотно обработать, чтобы не было скобок и запятой. Надеюсь доходчиво объяснил проблему. Сорян, не силён пока в этом
    Код:
    Код
    ؜#Объявление
    def newAd(message):
    with sqlite3.connect("database.sqlite", detect_types = sqlite3.PARSE_DECLTYPES | sqlite3.PARSE_COLNAMES) as con:
    cur = con.cursor()
    cur.execute("SELECT * FROM users")
    userbase = []
    while True:
    row = cur.fetchone()
    if row == None:
    break
    userbase.append(row)
    print("test: " + str(row))
    if len(userbase) > 1:
    for z in range(len(userbase)):
    #bot.send_message(userbase[z], f" **Объявление!**\n" + message.text)
    print("debug1: " + str(userbase[z]))
    else:
    #bot.send_message(userbase[0], f" **Объявление!**\n" + message.text)
    print("debug2: " + str(userbase[0]))
    if con:
    con.close()
    Скриншот консоли:
    [IMG]
     
  2. FeniLaz
    FeniLaz 20 окт 2020 Заблокирован(а) 28 10 дек 2017
    Я не шарю но есть такой код с рассылки
    Код

    # Рассылка сообщений
    def admin_rassilka(message):
    rassilka = message.text
    bot.send_message(message.from_user.id,
    'Запустить рассылку? Введите "Да", чтобы начать рассылку, либо же "Нет", чтобы отменить ее')
    bot.register_next_step_handler(message, admin_rassilka2, rassilka)


    # Рассылка сообщений_2
    def admin_rassilka2(message, rassilka):
    con = sqlite3.connect("dannie_2.db")
    cur = con.cursor()
    if message.text == "Да":
    bot.send_message(message.from_user.id, "Рассылка началась", reply_markup=keyboard_admin())
    cur.execute("SELECT id FROM users")
    id = cur.fetchall()
    for id in id:
    for id in id:
    try:
    bot.send_message(id, f"{rassilka}")
    time.sleep(1)
    except:
    pass
    from casino_bot import get_text_message_admin
    bot.register_next_step_handler(message, get_text_message_admin)

    else:
    bot.send_message(message.from_user.id, "Рассылка отменена", reply_markup=keyboard_admin())
    from casino_bot import get_text_message_admin
    bot.register_next_step_handler(message, get_text_message_admin)

     
    1. romanespit Автор темы
      FeniLaz, если есть возможность, можешь скинуть код записи в таблицу users из этого проекта?
    2. FeniLaz
      Код
              # Добавляем пользователю данные
      id = message.chat.id
      name = (f"{message.chat.first_name} {'|'} {message.chat.last_name}")
      status = 0
      balance = 0
      last_popolnenie = 0
      referals = 0
      ref_balance = 0
      con = sqlite3.connect("dannie_2.db")
      cur = con.cursor()
      cur.execute(f"INSERT INTO users (id,name,status,balance,last_popolnenie,referals,ref_balance,boss) "
      f"VALUES ({id},\"{name}\",{status},{balance},{last_popolnenie},{referals},{ref_balance},{boss})")
      con.commit()
  3. caedes
    caedes 20 окт 2020 Faded 201 2 дек 2019
  4. Pandazz
    Pandazz 21 окт 2020 68 5 май 2020
    Прикол в том, что методом fetchone ты берешь кортеж с одним id, соответственно ты и получаешь скобки и запятую, в примере выше решение
     
    1. romanespit Автор темы
      Pandazz, да. С этим разобрался. IDs выдаёт правильно. Но теперь выдаёт ошибку. Думаю связано с циклом while True. Он захватывает что-то лишнее
    2. romanespit Автор темы
  5. romanespit
    romanespit Автор темы 21 окт 2020 https://t.me/romahorny - смешинки для души 8933 19 дек 2019
    Разобрался.

    Код
    def newAd(message):
    with sqlite3.connect("shopBD.sqlite", detect_types = sqlite3.PARSE_DECLTYPES | sqlite3.PARSE_COLNAMES) as con:
    cur = con.cursor()
    cur.execute("SELECT userid FROM users")
    userbase = []
    while True:
    try:
    row = cur.fetchone()[0]
    print("test: " + str(row))
    userbase.append(row)
    except:
    break
    if len(userbase) > 1:
    for z in range(len(userbase)):
    #bot.send_message(userbase[z], f" **Объявление!**\n" + message.text)
    print("debug1: " + str(userbase[z]))
    time.sleep(5)
    else:
    #bot.send_message(userbase[0], f" **Объявление!**\n" + message.text)
    print("debug2: " + str(userbase[0]))
    if con:
    con.close()
     
Top
Загрузка...