Задача "NoneType" не может хранить значение - PullRequest
0 голосов
/ 27 июня 2019

Я просто пытаюсь выполнить команду остановки реализации с помощью Задачи, но программа возвращает этот код
[AttributeError: 'NoneType' object has no attribute 'cancel']
, который, кажется, не хранит глобальное значение, мне не хватает знаний о глобальном значении?
как следует Я реализую эту команду

import discord
import asyncio

task = None


async def start(message):
    while True:
        await message.channel.send("loop")
        await asyncio.sleep(10)

class MyClient(discord.Client):
    async def on_ready(self):
        print('Logged on as {0}!'.format(self.user))

    async def on_message(self, message):
        if message.author == client.user:
            return

        if message.content.startswith("!p start"):
            global task
            task = await client.loop.create_task(start(message))

        elif message.content.startswith("!p stop"):
            task.cancel()
            task = None


client = MyClient()
client.run('TOKEN')

if __name__ == "__main__":
    pass

Переформатировать немые коды

import discord
import asyncio


class TaskStore():
    global task

    def __init__(self, task):
        self.task = task


async def start(message):
    while True:
        await message.channel.send("loop")
        await asyncio.sleep(10)


class MyClient(discord.Client):
    async def on_ready(self):
        print('Logged on as {0}!'.format(self.user))

    async def on_message(self, message):
        if message.author == client.user:
            return

        if message.content.startswith("!p start"):
            TaskStore.task = await client.loop.create_task(start(message))

        elif message.content.startswith("!p stop"):
            TaskStore.task.cancel()
            TaskStore.task = None
        else:
            print("not working")


client = MyClient()
client.run('TOKEN')

if __name__ == "__main__":
    pass

Error

Игнорирование исключения в трассировке on_message (последний вызов был последним):
Файл "discord \ client.py", строка 270, в _run_event await coro (* args, ** kwargs) Файл "main.py", строка 30, в on_message TaskStore.task.cancel () AttributeError: тип объекта «TaskStore» не имеет атрибута «task»

1 Ответ

0 голосов
/ 27 июня 2019

Я был полностью сбит с толку, есть код, который я пытался реализовать
Я ценю фура, спасибо, что помогли мне с этим!

решаемые

import discord
import asyncio


class TaskStore():
    task = None

    def __init__(self, task):
        self.task = task


async def start(message):
    while True:
        await message.channel.send("loop")
        await asyncio.sleep(10)


class MyClient(discord.Client):
    async def on_ready(self):
        print('Logged on as {0}!'.format(self.user))

    async def on_message(self, message):
        if message.author == client.user:
            return

        if message.content.startswith("!p start"):
            if TaskStore.task != True:
                global task
                task = client.loop.create_task(start(message))
                TaskStore.task = True
            else:
                await message.channel.send("bot is currently working on it")
        elif message.content.startswith("!p stop"):
            if TaskStore.task is not None and not False:
                task.cancel()
                TaskStore.task = False
                await message.channel.send("bot will be off")
            else:
                await message.channel.send("bot is currently not working")


client = MyClient()
client.run('TOKEN')

if __name__ == "__main__":
    pass
...