daniil_6706
@daniil_6706

Проблема с ботом discord на python?

Проблема такая:
При запуске бота он запускается (то есть появляется в онлайне) но в консоли ничего не пишется и бот не реагирует на команды
import discord
from discord.ext import commands, tasks
import requests
import json
import asyncio

# Конфигурация
TOKEN = 'мой токен'
CHANNEL_ID = 1120311070179991682
TWITCH_CLIENT_ID = 'мой токен'
YOUTUBE_API_KEY = 'мой токен'

# Создание клиента Discord и определение префикса команд
intents = discord.Intents.default()
intents.typing = False
intents.presences = False
bot = commands.Bot(command_prefix='/', intents=intents)

# Словарь для хранения списка добавленных каналов Twitch и YouTube
users = {
    'twitch': [],
    'youtube': []
}

# Функция для отправки сообщения в определенный канал
async def send_message(channel_id, message):
    channel = bot.get_channel(channel_id)
    await channel.send(message)

# Команда для добавления канала Twitch
@bot.command(name='add-twitch')
async def add_twitch(ctx, channel_name):
    if channel_name.lower() not in users['twitch']:
        users['twitch'].append(channel_name.lower())
        await ctx.send(f'Канал Twitch {channel_name} добавлен.')
    else:
        await ctx.send(f'Канал Twitch {channel_name} уже добавлен.')

# Команда для добавления канала YouTube
@bot.command(name='add-youtube')
async def add_youtube(ctx, channel_id):
    if channel_id not in users['youtube']:
        users['youtube'].append(channel_id)
        await ctx.send(f'Канал YouTube {channel_id} добавлен.')
    else:
        await ctx.send(f'Канал YouTube {channel_id} уже добавлен.')

# Команда для отображения списка добавленных каналов Twitch
@bot.command(name='users-twitch')
async def show_twitch_users(ctx):
    if len(users['twitch']) > 0:
        user_list = '\n'.join(users['twitch'])
        await ctx.send(f'Список добавленных каналов Twitch:\n{user_list}')
    else:
        await ctx.send('Список добавленных каналов Twitch пуст.')

# Команда для отображения списка добавленных каналов YouTube
@bot.command(name='users-youtube')
async def show_youtube_users(ctx):
    if len(users['youtube']) > 0:
        user_list = '\n'.join(users['youtube'])
        await ctx.send(f'Список добавленных каналов YouTube:\n{user_list}')
    else:
        await ctx.send('Список добавленных каналов YouTube пуст.')

# Функция для получения информации о стримах на Twitch
def get_twitch_streams():
    headers = {'Client-ID': TWITCH_CLIENT_ID}
    streams = []
    for channel_name in users['twitch']:
        url = f'https://api.twitch.tv/helix/streams?user_login={channel_name}'
        response = requests.get(url, headers=headers)
        data = json.loads(response.text)
        if 'data' in data and len(data['data']) > 0:
            streams.append(data['data'][0])
    return streams

# Функция для получения информации о новых видео на YouTube
def get_youtube_videos():
    videos = []
    for channel_id in users['youtube']:
        url = f'https://www.googleapis.com/youtube/v3/search?key={YOUTUBE_API_KEY}&channelId={channel_id}&part=snippet,id&order=date&maxResults=1'
        response = requests.get(url)
        data = json.loads(response.text)
        if 'items' in data and len(data['items']) > 0:
            videos.append(data['items'][0])
    return videos

# Функция для проверки новых стримов на Twitch и отправки оповещений
async def check_twitch_streams():
    await bot.wait_until_ready()
    while not bot.is_closed():
        streams = get_twitch_streams()
        for stream in streams:
            channel_name = stream['user_name']
            stream_url = f'https://www.twitch.tv/{channel_name}'
            message = f'<@&1120382725484974110> {channel_name} начал(а) трансляцию. Давай смотреть!\n{stream_url}'
            await send_message(CHANNEL_ID, message)
        await asyncio.sleep(300)  # Проверка каждые 3 минут

# Функция для проверки новых видео на YouTube и отправки оповещений
async def check_youtube_videos():
    await bot.wait_until_ready()
    while not bot.is_closed():
        videos = get_youtube_videos()
        for video in videos:
            channel_name = video['snippet']['channelTitle']
            video_url = f'https://www.youtube.com/watch?v={video["id"]["videoId"]}'
            message = f'<@&1120382725484974110> У {channel_name} вышло новое видео. Хочешь посмотреть?\n{video_url}'
            await send_message(CHANNEL_ID, message)
        await asyncio.sleep(300)  # Проверка каждые 3 минут

# Асинхронная функция для запуска бота
async def run_bot():
    await bot.start(TOKEN)

# Запуск бота
loop = asyncio.get_event_loop()
loop.create_task(run_bot())
loop.create_task(check_twitch_streams())
loop.create_task(check_youtube_videos())

try:
    loop.run_forever()
except KeyboardInterrupt:
    loop.run_until_complete(bot.logout())
finally:
    loop.close()
  • Вопрос задан
  • 90 просмотров
Решения вопроса 1
shurshur
@shurshur
Сисадмин, просто сисадмин...
С некоторых пор API Discord больше не позволяет по умолчанию ботам видеть содержимое сообщений. Нужно явно запросить message_content intents:

intents.message_content = True

А также надо включить privileged intents в developer portal для этого бота.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы