#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
ищет пользователей по их идентификатору, поэтому вам нужно сохранить идентификатор пользователя вместо имени пользователя.
В противном случае вы можете создать свой собственный 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")
Хотя я действительно рекомендую первый вариант, он намного проще. Поскольку вам пришлось бы создать пользовательский контекст, если вы не используете это в команде, я полагаю.