Я пытаюсь получить все сообщения от пользователя на определенном канале гильдии. Однако он получает только одно сообщение от пользователя, хотя пользователь отправил более 30 сообщений в канале/гильдии.
async def check(channel):
fetchMessages = await channel.history().find(lambda m: m.author.id == 627862713242222632)
print(fetchMessages.content)
Проблема в том, что .find()
и .get()
возвращают только самую первую запись, соответствующую вашему условию. Вместо этого вы можете flatten()
сообщения из этого канала, который предоставит вам список сообщений, а затем отфильтрует сообщения, принадлежащие указанному вами идентификатору. Не забудьте проверить ссылки на документацию.
@client.command()
async def check(ctx, channel:discord.TextChannel): # Now you can tag the channel
messages = await channel.history().flatten()
# messages is now list of message objects.
for m in messages:
if m.author.id == 627862713242222632: # ID you provided
print(m.content) # one message at the tim
Или альтернативным способом будет использование filter()
.
@client.command()
async def check(ctx, channel:discord.TextChannel):
def user_filter(message):
return message.author.id == 627862713242222632
messages = [m.content async for m in channel.history().filter(user_filter)]
print(messages) # prints the list we get from the line above