@kelly123

Почему не работает api в моем коде бота дискорд discord.py?

Вот мой код бота
import discord
import requests
import json
from discord.ext import commands

bot = commands.Bot(command_prefix='!')

@bot.command()
async def ping(ctx):
    await ctx.send('pong')
    
@bot.command()
async def vimeworld(ctx):
    r = requests.get('https://api.vimeworld.ru/online')
    title = r[0]['total'].json
    await ctx.send(title)

bot.run('token')

если что я в конце вставил token свой у меня просто не работает комманда !vimeworld почему-то
И если что подскажите какие библиотеки должны быть установлены в python через pip
я просто новичок в python
  • Вопрос задан
  • 80 просмотров
Решения вопроса 1
@Vindicar
Не работает - выводит ошибку в консоль? Или молча не работает?
Если молча, заверни тело vimeworld() в блок
try:
    ...
except Exception as err:
    print(err)

Также можно расставить отладочные print(), чтобы понять, на каком месте происходит ошибка/подвисает программа.

Вообще я вижу как минимум ошибку в строке
r[0]['total'].json
Судя по JSON, который мне отдаёт указанный URL, это должно выглядеть примерно так:
json_data = r.json()
total = json_data['total']
await ctx.send(total)


Когда разберёшься с этим, прими к сведению следующее: discord.py - асинхронная однопоточная библиотека. Пока выполняется синхронный код, например, твой обработчик команды, бот не может делать ничего другого. А request - как раз синхронная библиотека! Пока она выполняет запрос, она блокирует работу программы. Поэтому если целевой сайт "задумается", твой бот подвиснет. Мигрируй код на библиотеку типа aiohttp. Она тоже асинхронная, и на время общения с сайтом твой бот сможет заниматься другими делами.

Ну и напоследок, не стоит начинать учить питон с написания ботов. Тут достаточно подводных камней. Начни с азов, потом вернись к этому проекту.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

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