Глобальная переменная не меняет значение внутри события - PullRequest
0 голосов
/ 03 сентября 2018

Команда !et_as создает событие, при котором в течение 10 секунд каждый раз, когда кто-то отправляет сообщение, он увеличивает счетчик на единицу.
По истечении 10 секунд бот сообщает, сколько сообщений было отправлено, и начинает 3-часовое время восстановления.
Единственная проблема заключается в том, что переменная FeastActive, которая определяет, происходит ли событие, не изменяется после того, как будет выполнена первая команда !et_as.

@theclient.event
async def on_message(message):
    global FeastActive
    global Feast
    global FeastCount

    if message.author == theclient.user:
        return

    if FeastActive == True: 
        FeastCount += 1
        await theclient.send_message(message.channel, ' NOM NOM NOM')

    if message.content.startswith('!hello'):
        msg = 'Hello {0.author.mention}'.format(message)
        await theclient.send_message(message.channel, msg)

    if message.content.startswith('!joke'):
        r = requests.get('https://icanhazdadjoke.com', headers={"Accept":"application/json"}).text
        l = json.loads(r)
        await theclient.send_message(message.channel, "<@" + message.author.id + "> " + l['joke'])

    if message.content.startswith('!et_as'):
        if Feast == True and FeastActive == False:

            Feast = False
            FeastActive = True
            await theclient.send_message(message.channel, "<@" + message.author.id + "> has begun a feast! Hurry, 10 seconds!")
            time2.sleep(10)
            FeastActive = False
            await theclient.send_message(message.channel, "@everyone We have feasted on " + str(FeastCount) +" as! Next feast can start in 3 hours")
            time2.sleep(10800)
            Feast = True

1 Ответ

0 голосов
/ 03 сентября 2018

Вам необходимо установить глобальные переменные вне вашего события

FeastActive = False
Feast = True
FeastCount = 0

@theclient.event
async def on_message(message):
  global FeastActive
  global Feast
  global FeastCount        
  #rest of your code

Вот полный код, который работает на моем конце

@theclient.event
async def on_message(message):
  global FeastActive
  global Feast
  global FeastCount

  if message.author == theclient.user:
    return

  if FeastActive == True: 
    FeastCount += 1
    await theclient.send_message(message.channel, ' NOM NOM NOM')

  if message.content.startswith('!hello'):
    msg = 'Hello {0.author.mention}'.format(message)
    await theclient.send_message(message.channel, msg)

  if message.content.startswith('!joke'):
    r = requests.get('https://icanhazdadjoke.com', headers={"Accept":"application/json"}).text
    l = json.loads(r)
    await theclient.send_message(message.channel, "<@" + message.author.id + "> " + l['joke'])

  if message.content.startswith('!et_as'):
    if Feast == True and FeastActive == False:

      Feast = False
      FeastActive = True
      await theclient.send_message(message.channel, "<@" + message.author.id + "> has begun a feast! Hurry, 10 seconds!")
      await asyncio.sleep(10)
      FeastActive = False
      await theclient.send_message(message.channel, "@everyone We have feasted on " + str(FeastCount) +" as! Next feast can start in 3 hours")
      await asyncio.sleep(5)
      Feast = True
...