Follow

Keep Up to Date with the Most Important News

By pressing the Subscribe button, you confirm that you have read and are agreeing to our Privacy Policy and Terms of Use
Contact

How do I count the number of messages per day in pycord?

So I basicly count all the messages in a channel.
I also want to count the number of messages per day.
I know message.created_at returns a datetime, but how do I count how many times a date is present in this list?

this is my current code:

count = 0
async for message in channel.history(limit=None):
    count += 1
    print(message.created_at)

I tried to do it like this:

MEDevel.com: Open-source for Healthcare and Education

Collecting and validating open-source software for healthcare, education, enterprise, development, medical imaging, medical records, and digital pathology.

Visit Medevel

count = 0
async for message in channel.history(limit=None):
    count += 1
    dates.append(message.created_at)
print(dates.count(dates[0]))

But this just returns "1" (while there are far more different days in the list)

This is my first post on stack overflow, don’t be toxic please, feedback is welcome!

>Solution :

Your code isn’t counting the number of messages on a certain date, it’s counting the message on a certain datetime.datetime object, which represents a specific point in time (could be down to a microsecond depending on the API precision).

This is because message.created_at returns the time and date of the message, what you want is probably message.created_at.date() (see datetime docs).

If you want to know for each date how many messages there were, you can use a dictionary to count:

messages_per_date = {}  # empty dictionary
async for message in channel.history(limit=None):
    message_date = message.created_at.date()
    # Add the date to the dictionary if necessary
    if message_date not in messages_per_date:
        messages_per_date[message_date] = 0
    # Increment the number of messages on that date
    messages_per_date[message_date] += 1
# Print the number of messages today
print(messages_per_date[datetime.date.today()])

You can use collections.defaultdict to make the code significantly shorter:

import collections

# This creates a dictionary in which the default value is zero
messages_per_date = collections.defaultdict(int)

async for message in channel.history(limit=None):
    # Now the values can be incremented without checking the key
    messages_per_date[message.created_at.date()] += 1

print(messages_per_date[datetime.date.today()])
Add a comment

Leave a Reply

Keep Up to Date with the Most Important News

By pressing the Subscribe button, you confirm that you have read and are agreeing to our Privacy Policy and Terms of Use

Discover more from Dev solutions

Subscribe now to keep reading and get access to the full archive.

Continue reading