Discord-Bot не отправляет сообщения пользователям

#python #json #discord.py

Вопрос:

В настоящее время я работаю над ботом, который отправляет сообщения пользователям в заданный json-файл через определенные промежутки времени. Я попробовал этот код, но он не выполняет то, что должен, и не выдает ошибку, с которой я мог бы работать.

 @tasks.loop(seconds=10)
async def dm_loop():
    with open("users.json" "r") as file:
        users = json.load(file)
    for stgru in users:
        for i in users[stgru]:
            user = await client.fetch_user(i)
            await user.send("hello")
 

И на всякий случай, если вам интересно: короткие временные интервалы и ненужное сообщение: «привет», предназначены только для целей тестирования. Файл «users.json», упомянутый в коде, имеет следующий формат:

 {
"724": ["name1#2819", "name2#2781", "name3#2891"],
"727": [],
"986": ["name4#0192"],
"840": ["name5#1221", "name6#6652"],
"798": ["name7#3312", "name8#8242", "name9#1153", "name10#3318"]
}
 

Я уже добавил метод «dm_loop.start ()» в свой «on_ready ()», но он вообще не работает.

Я был бы так рад, если бы кто-нибудь мог мне здесь помочь. Спасибо

Ответ №1:

Согласно документам, fetch_user ищет пользователей по их идентификатору, поэтому вам нужно сохранить идентификатор пользователя вместо имени пользователя.

https://discordpy.readthedocs.io/en/master/ext/commands/api.html ?выделить=fetch_user#discord.ext.commands.Bot.fetch_user

В противном случае вы можете создать свой собственный UserConverter . Вот пример того, как вы это сделаете.

 from discord.ext import commands

[...]

user_name = "some_tag#1234"
user = await commands.converter.UserConverter().convert(ctx, argument=user_name)
await user.send("Hello")
 

Хотя я действительно рекомендую первый вариант, он намного проще. Поскольку вам пришлось бы создать пользовательский контекст, если вы не используете это в команде, я полагаю.