Как сделать бота, который читает, сколько раз сообщение было написано в текстовом канале с использованием discord.py? - PullRequest
0 голосов
/ 27 сентября 2019

Это мой код: (я использую python 3.7)


    import discord
    import random
    import json
    import asyncio
    from importlib import import_module
    from importlib import reload


    class MyClient(discord.Client):
        async def on_ready(self):
            print('Logged in as')
            print(self.user.name)
            print(self.user.id)
            print('------')
            activity = discord.Activity(name='for someone to hug!', type=discord.ActivityType.watching)
            await client.change_presence(activity=activity)

        async def on_message(self, message):
            # we do not want the bot to reply to itself
            if message.author.id == self.user.id:
                return

            with open("Bobby\code\Bobby\json\on_message.json") as json_file:
                data = json.load(json_file)
                for key in data["command"]: 
                    with open("Bobby\code\Bobby\json\settings.json") as json_file2:
                        data2 = json.load(json_file2)
                        cmd = data2["settings"]["prefix"]+key  
                    if message.content.startswith(cmd):
                        counter = 0
                        async for msg in client.logs_from(message.channel, limit=500):
                            await asyncio.sleep(3)
                            if msg.content.lower() == message.content.lower():
                                counter = counter + 1
                        result = "" + counter
                        await message.channel.send(result)   
                else:
                    for key in data["message"]: 
                        if key in message.content.lower():
                            counter = 0
                            for key2 in data["message"][""+key+""]:
                                if key2 == "channel":
                                    counter = counter + 1
                                    channel = client.get_channel(data["message"][""+key+""]["channel"])
                                    await channel.send(random.choice(data["message"][""+key+""]["messages"]))
                            if counter == 0:
                                await message.channel.send(random.choice(data["message"][""+key+""]["messages"]))



    client = MyClient()
    client.run('my token')

Я перепробовал весь свой проект и знаю, что все работает, кроме этой части:

   async for msg in client.logs_from(message.channel, limit=500):
       await asyncio.sleep(3)
       if msg.content.lower() == message.content.lower():
           counter = counter + 1
   result = "" + counter

Я не понимаю, как работать с logs_from , я также пытался использовать message.channel.history так:

   counter = 0
   async for m in message.channel.history(limit=500):
       await asyncio.sleep(3)
       if message.content.lower() == m.content.lower():
           counter = counter + 1
   result = "" + counter

Также какЯ могу искать в всех истории текстового канала?

Полагаю, у меня что-то не получается с использованием await и async , есть ли у кого-нибудь предложения, чтобы дать мне решение этой проблемы?Должен ли я использовать другой подход для достижения этого?

...