пишу бота для телеги на aiogram вот такая ошибка

JollyBell

Новичок
Пользователь
Окт 14, 2020
11
0
1
Это мой первый бот, хочу сделать так, чтобы он автоматический отправлял новости людям, которые на него подписаны.


Python:
import config

import logging



from aiogram import Bot, Dispatcher, executor, types

from sqlighter import SQLigher



#Задаю уровень логов

logging.basicConfig(level=logging.INFO)



#инициализация бота

bot = Bot(token='1324235348:AAHGrhmwUpdRqH3buRPnLaqhL0hK65ZH1Nk')

dp = Dispatcher(bot)



#инициализация SQLigher

db = SQLigher('db.db')





#Активация подписки

@dp.message_handler(commands=['subscribe'])

async def subscribe(message: types.Message):

    if(not db.subscribe_exists(message.from_user.id)):

        #если нет юзера, то добавляем

        db.add_subscriber(message.from_user.id)

    else:

        #он есть, то обновляем статус подписки

        db.update_subscription(message.from_user.id, True)



    await message.answer('Вы успешно подписались на рассылку!\nЖдите,скоро будут новые обновления и новости!')

#Команда отписки

@dp.message_handler(commands=['unsubscribe'])

async def unsubscribe(message: types.Message):

    if(not db.subscriber_exists(message.from_user.id)):

        #Если его нет, то все равно добавляем в бд

        dp.add_subscriber(message.from_user.id, False)

        await message.answer('Вы и так не подписаны')

    else:

        #если он есть, то обновляем статус

        dp.update_subscription(message.from_user.id, False)

        await message.answer('Вы успешно отписались от рассылки.')



#Запуск!

if __name__ == '__main__':

    executor.start_polling(dp, skip_updates=True)















import sqlite3



class SQLigher:



    def __init__(self, database_file):

        """Подключаемся к БД и сохраняем курсор соединения"""

        self.connection = sqlite3.connect(database_file)

        self.cursor = self.connection.cursor()



    def get_subscriptions(self, status = True):

        """Получаем активных подписчкиков бота"""

        with self.connection:

            return self.cursor.execute("SELECT * FROM 'subscriptions' WHERE 'status' = ?", (status,)).fetchall()





    def subscriber_exists(self, user_id):

        """Наличие в БД"""



        with self.connection:

            result = self.cursor.execute("SELECT * FROM 'subscriptions' WHERE 'user_id' = ?", (user_id,)).fetchall()

            return bool(len(result))



    def add_subscriber(self, user_id, status = True):

        """Добовление в БД"""

        with self.connection:

            return self.cursor.execute("INSETR INTO 'sebcriptions' ('user_id', 'status') VALUES(?,?)", (user_id , status))

    def update_subscription(self, user_id, status):



        """Обновление БД"""

        return self.cursor.execute("UPDATE 'subscriptions' SET 'status' = ? WHERE 'user_id' = ? ",(status, user_id))

    def close(self):

        """Закрываем соединение с БД"""

        self.connection.close()
 

Вложения

  • F4FxjIFI0LE.jpg
    F4FxjIFI0LE.jpg
    18,9 КБ · Просмотры: 6
Последнее редактирование:

regnor

Модератор
Команда форума
Модератор
Июл 7, 2020
2 595
461
83
ваш метод называется subscriber_exists, а вы пишите subscribe_exists ( буковку 'r' не дописали) и не надо выкладывать код в картинке перепечатывать его никто не будет
 

JollyBell

Новичок
Пользователь
Окт 14, 2020
11
0
1
спасибо, буду знать
 

lynulx

Модератор
Команда форума
Модератор
Авг 9, 2020
139
19
18
Это мой первый бот, хочу сделать так, чтобы он автоматический отправлял новости людям, которые на него подписаны.
import config
import logging

from aiogram import Bot, Dispatcher, executor, types
from sqlighter import SQLigher

#Задаю уровень логов
logging.basicConfig(level=logging.INFO)

#инициализация бота
bot = Bot(token='1324235348:AAHGrhmwUpdRqH3buRPnLaqhL0hK65ZH1Nk')
dp = Dispatcher(bot)

#инициализация SQLigher
db = SQLigher('db.db')


#Активация подписки
@dp.message_handler(commands=['subscribe'])
async def subscribe(message: types.Message):
if(not db.subscribe_exists(message.from_user.id)):
#если нет юзера, то добавляем
db.add_subscriber(message.from_user.id)
else:
#он есть, то обновляем статус подписки
db.update_subscription(message.from_user.id, True)

await message.answer('Вы успешно подписались на рассылку!\nЖдите,скоро будут новые обновления и новости!')
#Команда отписки
@dp.message_handler(commands=['unsubscribe'])
async def unsubscribe(message: types.Message):
if(not db.subscriber_exists(message.from_user.id)):
#Если его нет, то все равно добавляем в бд
dp.add_subscriber(message.from_user.id, False)
await message.answer('Вы и так не подписаны')
else:
#если он есть, то обновляем статус
dp.update_subscription(message.from_user.id, False)
await message.answer('Вы успешно отписались от рассылки.')

#Запуск!
if __name__ == '__main__':
executor.start_polling(dp, skip_updates=True)







import sqlite3

class SQLigher:

def __init__(self, database_file):
"""Подключаемся к БД и сохраняем курсор соединения"""
self.connection = sqlite3.connect(database_file)
self.cursor = self.connection.cursor()

def get_subscriptions(self, status = True):
"""Получаем активных подписчкиков бота"""
with self.connection:
return self.cursor.execute("SELECT * FROM 'subscriptions' WHERE 'status' = ?", (status,)).fetchall()


def subscriber_exists(self, user_id):
"""Наличие в БД"""

with self.connection:
result = self.cursor.execute("SELECT * FROM 'subscriptions' WHERE 'user_id' = ?", (user_id,)).fetchall()
return bool(len(result))

def add_subscriber(self, user_id, status = True):
"""Добовление в БД"""
with self.connection:
return self.cursor.execute("INSETR INTO 'sebcriptions' ('user_id', 'status') VALUES(?,?)", (user_id , status))
def update_subscription(self, user_id, status):

"""Обновление БД"""
return self.cursor.execute("UPDATE 'subscriptions' SET 'status' = ? WHERE 'user_id' = ? ",(status, user_id))
def close(self):
"""Закрываем соединение с БД"""
self.connection.close()
на будущее, для вставки кода нажимайте на три точки и выбирайте "код"
 

Форум IT Специалистов