Не обрабатывает сообщения в разрешенных чатах

Бот просто не реагирует на сообщения из указанных групп (а только на сообщения с ">"). Нужно чтобы бот отвечал на все сообщения в указанных группах. (указанные айди не настоящие)

import os
import asyncio
import requests
import json
import time
from dotenv import load_dotenv
from telethon import TelegramClient, events

# Отключение предупреждений о небезопасных запросах
urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning)

# Загрузка ключей
load_dotenv()
API_ID = int(os.getenv('API_ID'))
API_HASH = os.getenv('API_HASH')
GIGACHAT_AUTH_KEY = os.getenv('GIGACHAT_AUTH_KEY')
ALLOWED_CHATS = [
    -1001082242887375,    # Rigota Riders
    -1001961994586691,    # Другая группа
    -1001904753846008     # Еще одна группа
]
KEYWORDS = ['@kostoli', '>', 'Привет', 'Прохор', 'Сладких снов']
DELAY_BETWEEN_SHEEP = 0.3

# Клиент Telegram
tg_client = TelegramClient('my_account', API_ID, API_HASH)

# Глобальные переменные для GigaChat
gigachat_access_token = None
gigachat_token_time = 0

async def send_sheep(event):
    """Отправка 100 баранов"""
    for i in range(1, 101):
        await event.reply(f"{i} баран")
        await asyncio.sleep(DELAY_BETWEEN_SHEEP)


def get_gigachat_token():
    """Получение нового токена доступа GigaChat"""
    global gigachat_access_token, gigachat_token_time

    url = "https://ngw.devices.sberbank.ru:9443/api/v2/oauth"
    payload = {'scope': 'GIGACHAT_API_PERS'}
    headers = {
        'Content-Type': 'application/x-www-form-urlencoded',
        'Accept': 'application/json',
        'RqUID': '1bfc10fe-0540-4e4b-ad2a-ca33706db67f',
        'Authorization': f'Basic {GIGACHAT_AUTH_KEY}'
    }

    try:
        response = requests.post(url, headers=headers, data=payload, verify=False)
        if response.status_code == 200:
            data = response.json()
            gigachat_access_token = data['access_token']
            gigachat_token_time = time.time()
            return True
        print(f"Ошибка получения токена: {response.status_code} - {response.text}")
    except Exception as e:
        print(f"Ошибка подключения: {str(e)}")
    return False


def generate_gigachat_response(text):
    """Генерация ответа через GigaChat API"""
    global gigachat_access_token, gigachat_token_time

    if not gigachat_access_token or (time.time() - gigachat_token_time) > 3500:
        if not get_gigachat_token():
            return "⚠️ Ошибка авторизации в GigaChat"

    url = "https://gigachat.devices.sberbank.ru/api/v1/chat/completions"
    headers = {
        'Content-Type': 'application/json',
        'Accept': 'application/json',
        'Authorization': f'Bearer {gigachat_access_token}'
    }
    payload = {
        "model": "GigaChat",
        "messages": [{"role": "user", "content": text}],
        "temperature": 0.7,
        "max_tokens": 1000
    }

    try:
        response = requests.post(url, headers=headers, json=payload, verify=False)
        if response.status_code == 401:
            if get_gigachat_token():
                headers['Authorization'] = f'Bearer {gigachat_access_token}'
                response = requests.post(url, headers=headers, json=payload, verify=False)

        if response.status_code == 200:
            data = response.json()
            return data['choices'][0]['message']['content']

        return f"⚠️ Ошибка GigaChat ({response.status_code}): {response.text}"
    except Exception as e:
        return f"⚠️ Ошибка подключения: {str(e)}"


@tg_client.on(events.NewMessage(incoming=True))
async def handler(event):
    # Игнорируем исходящие сообщения
    if event.out:
        return

    # Получаем информацию о чате
    chat = await event.get_chat()
    chat_id = chat.id
    chat_username = getattr(chat, 'username', '')

    # Проверяем разрешен ли чат
    is_allowed_chat = any([
        #event.is_private,
        event.is_private and ("Привет" or "привет" or "Пока" or "пока"),
        chat.id in ALLOWED_CHATS,
        ">" in event.text,
        #chat_username in ALLOWED_CHATS,
        #f"@{chat_username}" in ALLOWED_CHATS
    ])

    if not is_allowed_chat:
        return


    # Логика ответа:
    # 1. В ЛС - на все сообщения
    # 2. В группах - только если чат разрешен И есть ключевое слово

    # Обработка команды /sleep
    if event.raw_text == '/sleep':
        if event.is_private:
            await event.delete()
            await send_sheep(event)
        else:
            await event.reply("? Эта команда доступна только в личных сообщениях")
        return

    # Ответ нейросетью
    response = generate_gigachat_response(event.raw_text)
    await event.reply(response)


if __name__ == '__main__':
    print("Бот запущен с GigaChat API")
    print(f"Разрешенные чаты: {ALLOWED_CHATS}")
    print(f"Ключевые слова для групп: {KEYWORDS}")

    if not get_gigachat_token():
        print("ОШИБКА: Не удалось получить токен GigaChat! Проверьте ключ в .env")
    else:
        tg_client.start()
        tg_client.run_until_disconnected()```

Ответы (1 шт):

Автор решения: Рустам Рысаев

У вас неккоректная проверка разрешенных чатов

is_allowed_chat = any([
    event.is_private and ("Привет" or "привет" or "Пока" or "пока"),
    chat.id in ALLOWED_CHATS,
    ">" in event.text,
])

В выражении

event.is_private and ("Привет" or "привет" or "Пока" or "пока")

Вы всегда получаете True, потому что Python интерпретирует это так:

event.is_private and "Привет"  # строка "Привет" — это всегда True

Т.е. вы всегда будете считать, что ЛС подходит, даже если там нет этих слов

Да и в целом делите логику ответов в личных сообщений и в группе, самим же проще будет...

И самое интересное, зачем вам список KEYWORDS, если вы его нигде не используете? Вы только хардкодом прописали '>' in event.text, вот бот и реагирует только на '>'

→ Ссылка