Почему не увеливается цифра в колонке?

Рейтинг: 0Ответов: 1Опубликовано: 03.08.2023

Подскажите, пожалуйста, при добавлении, 2 свои аккаунтов, в группу телеграм, всё равно, цифра 1, в колонке new_chat_members. Мне нужно, сделать так, если пользователь, не пригласит, 40 контактов, в группу, не сможет, писать в группе. На одном сайте, мне написали так, цитирую "Обработчик кнопки, внутри проверка."

Это, фото, одного бота, как я, пытаюсь, сделать. введите сюда описание изображения

Фото Бд.

введите сюда описание изображения

Бд код.

connection = sqlite3.connect("new_chat_members.db")
cursor = connection.cursor()
connection.execute('''CREATE TABLE IF NOT EXISTS USERS
        (id INTEGER PRIMARY KEY NOT NULL, user_id INTEGER, chat_id INTEGER, name TEXT, username TEXT, new_chat_members INTEGER)''')
connection.commit()

class SQLither:
    def __init__(self, db_file):
        self.connection = sqlite3.connect(db_file)
        self.cursor = self.connection.cursor()

    def add_user(self, user_id, chat_id, name, username, new_chat_members):
            with self.connection:
                return self.cursor.execute("INSERT INTO 'users' (user_id, chat_id, name, username, new_chat_members) VALUES(?,?,?,?,?)", (user_id, chat_id, name, username, new_chat_members))

    def user_exists(self, user_id, chat_id):
        with self.connection:
            result = self.cursor.execute("SELECT * FROM users WHERE user_id=? and chat_id=?", (user_id,chat_id,)).fetchall()

db = SQLither("new_chat_members.db")

Хендлер, при отправке сообщения, удаляет и устанавливает ограничения.

@dp.message_handler(content_types=['text', 'photo', 'video', 'document', 'audio', 'video_note', 'voice', 'animation', 'contact', 'dice', 'location', 'poll', 'sticker', 'venue'])
async def get_handler(message: types.Message):      
    user_id = message.from_user.id
    username = message.from_user.username
    chat_id = message.chat.id
    first_name = message.from_user.first_name
    last_name = message.from_user.last_name
    name = message.from_user.full_name


    ChatMember.status = await bot.get_chat_member(chat_id=message.chat.id, user_id=message.from_user.id)
    ChatMemberUpdated.new_chat_member = await bot.get_chat_member(chat_id=message.chat.id, user_id=message.from_user.id)
    #print(ChatMemberUpdated)
    if not ChatMember.status in ChatMemberUpdated.new_chat_member.user:
                keyboard = types.InlineKeyboardMarkup(row_width=1)
                checkurl = types.InlineKeyboardButton(text='✅Я добавил(а) контакты', callback_data=f'captcha_member:{user_id}')
                keyboard.add(checkurl)
                try:
                    msg = await message.reply(f"Извините! <a href=\"tg://user?id={user_id}\">{name}</a>. \n<b>📢 Вам нужно добавить, 40 человек, прежде чем, Вы сможете, публиковать сообщения, в группе.</b>".format(message.from_user.id), disable_web_page_preview=True, parse_mode='html', reply_markup=keyboard)
                    asyncio.create_task(delete_message(msg, 180))
                    await message.delete()
                    await asyncio.sleep(2)
                    await bot.restrict_chat_member(message.chat.id, message.from_user.id, ChatPermissions(can_send_messages=False, can_send_media_messages=False, can_send_other_messages=False, can_add_web_page_previews=False, can_send_polls=False, can_pin_messages=False, can_invite_users=True))
                except Exception as e:
                    print(e)
                    return

Обработчик кнопки, но при добавлении контактов, не, снимает ограничения.

@dp.callback_query_handler(text_startswith='captcha')
#@dp.callback_query_handler(text="captcha")
async def captcha_member(call: types.CallbackQuery):
    user_id = str(call.from_user.id)
    to_id = call.data.split(':')[1]
    chat_id = call.message.chat.id
    username = call.from_user.username
    name = call.from_user.full_name
    new_chat_members = len(call.message.new_chat_members)

    ChatMemberMember.status = await bot.get_chat_member(chat_id=call.message.chat.id, user_id=call.from_user.id)
    ChatMemberUpdated.new_chat_member = await bot.get_chat_member(chat_id=call.message.chat.id, user_id=call.from_user.id)
    if ChatMemberUpdated.new_chat_member in ChatMemberMember.status and user_id in to_id:
        await bot.restrict_chat_member(chat_id=call.message.chat.id, user_id=call.from_user.id, permissions=types.ChatPermissions(can_send_messages=True, can_send_media_messages=True, can_send_other_messages=True, can_add_web_page_previews=True, can_send_polls=True, can_pin_messages=True, can_invite_users=True, can_change_info=True, until_date=None))
        if db.user_exists(user_id, chat_id):
            db.add_to_db(call.from_user.id, chat_id, name, username, new_chat_members)

    elif user_id in to_id:
        await call.answer(text="Вы пригласили, меньше 40 или ни кого, не пригласили.", show_alert=True)

    else:
        await call.answer(text="Эта ссылка адресована другому пользователю", show_alert=True)

Этот, хендлер, считывает кто пригласил в группу, или сам присоединился, к группе.

@dp.message_handler(content_types=['new_chat_members'])
async def new_user_joined(message: types.Message):
    user_id = message.from_user.id
    username = message.from_user.username
    name = message.from_user.full_name
    chat_id = message.chat.id
    new_chat_members = len(message.new_chat_members)

    ChatMemberMember = await bot.get_chat_member(chat_id=message.chat.id, user_id=message.from_user.id)
    ChatMemberUpdated.new_chat_member = await bot.get_chat_member(chat_id=message.chat.id, user_id=message.from_user.id)

    if ChatMemberUpdated.new_chat_member:
        if not db.user_exists(user_id, chat_id):
                    db.add_user(message.from_user.id, chat_id, name, username, new_chat_members)
                    return

Подскажите, как прописать, чтобы работало, долго, делаю, свой код, плохо, понимаю пайтов, всё, методом экспериментов и чтения документации, просмотров видео уроков, о пайтоне.

Фото. введите сюда описание изображения

введите сюда описание изображения

Ответы

▲ 2Принят

Из того, как я понял ваш вопрос - вам нужно обновить значение new_chat_member в БД при приглашении пользователем человека. Для обновления значений в уже существующей записи используйте UPDATE. Вот пример кода, который может вам помочь:

def user_added_new_user(self, user_id):
     with self.connection:
          self.cursor.execute("UPDATE users SET new_chat_members = new_chat_members + 1 WHERE user_id=?", (user_id,))

Вставьте его в код БД и вызывайте его в файле main внутри метода new_user_joined

db.user_added_new_user(user_id)

После вызова, значение new_chat_member в БД станет на 1 больше (т.е. было 1, станет 2), у переданного методу пользователя