#python #discord.py
#питон #discord.py
Вопрос:
Я использую этот код, чтобы получить общее количество сообщений, отправленных пользователем на сервер, и сохранить его в словаре с помощью channel.history, но по какой-то причине я получаю ошибку атрибута
@client.event async def on_ready(): dct_channels = {} dct_memb = {} for guild in client.guilds: a = guild.members for channel in guild.channels: dct_channels.setdefault(guild.name , []) dct_channels[guild.name].append(channel.id) for names in a: dct_memb.setdefault(guild.name , []) dct_memb[guild.name].append(names.id) channels = [] users = [] data = {} for i in dct_channels.values(): for j in i: channels.append(j) for j in dct_memb.values(): for i in j: users.append(i) for j in channels: channel = client.get_channel(j) async for message in channel.history(): for i in users: user = client.get_user(i) if message.author == user: data.setdefault(user , message.content) data[user].append(message.content) print(data)
Ответ №1:
Вы можете получить историю только для текстовых каналов. Попробуйте написать следующее:
if isinstance(channel, discord.TextChannel):
В цикле for.
Ваш исправленный код
for j in channels: channel = client.get_channel(j) if isinstance(channel, discord.TextCahnnel): async for message in channel.history(): for i in users: user = client.get_user(i) if message.author == user: data.setdefault(user , message.content) data[user].append(message.content) print(data)
Комментарии:
1. что это на самом деле возвращает?
2. Он возвращает
True
, еслиchannel
это текстовый канал.3. Это не вернет вам историю. Это позволит проверить, можете ли вы получить историю канала.
4. о, ладно, спасибо, чувак, это сработало