La discorde et de multitraitement deadman commutateur python

0

La question

j'essayais de faire cette logique donc, si j'ai reçu un message sur la discorde qui contient le "911" il détruit le script ou les appels de certaines fonctions et l'arrêt de la minuterie im face à un grand nombre d'erreurs et je ne peux pas penser à de l'oof bonne façon de le faire ...

toute aide ?

from time import sleep
import discord
import multiprocessing

client = discord.Client()
manager = multiprocessing.Manager()
sign = manager.boolean(False)

def Timer(sign):
    for second in range(15):
        if sign == True:
            print("bloooock")
            break
        if sign == False:
            print("passsssss")
            sleep(1)
def discord_message(client, sign):
    @client.event
    async def on_ready():
        print('Logged on as', client)
    async def on_message(message):
        messageContent = message.content
        if len(messageContent) > 0:
            if messageContent == str("911"):
                sign = manager.bool(True)
    client.run('###')
if __name__ == '__main__':
    freeze_support()
    p1 = multiprocessing.Process(target=Timer, args=(sign,))
    p2 = multiprocessing.Process(target=discord_message, args=(client, sign,))
    p1.start()
    p2.start()
    p1.join()
    p2.join()
discord discord.py python python-3.x
2021-11-23 22:45:54
1

La meilleure réponse

1

Lorsque vous définissez une variable dans une fonction, il sera par défaut à la portée locale. Regardez cet exemple:

a = 1
def f(): a = 2
f()
print(a)

Essayer en ligne!

Ce sera la sortie 1.

a = 1
def f(): print(a); a = 2
f()
print(a)

Essayer en ligne!

Ce sera fait d'erreur, parce que depuis que vous définissez a = 2 au sein de la fonction f, a devient une variable locale, de sorte print(a) des erreurs car il n'est pas défini à ce stade.

Pour contourner ce problème, mettez global a en haut de votre fonction. Dans votre cas, ne global sign à l'intérieur de def on_message comme suit:

def discord_message(client, sign):
    ...
    async def on_message(message):
        global sign
        ...

Maintenant, quand sign = manager.bool(True) est en cours de définition, il n'affecte pas la variable globale sign qui l' Timer est la lecture.

Aussi, je pense que vous devez ajouter @client.event ci-dessus async def on_message ainsi.

2021-11-23 23:20:31

merci, ça marche bien :)
Joseph Yosoevsky

Dans d'autres langues

Cette page est dans d'autres langues

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................