Ошибка типа: объект 'bool' не повторяется - PullRequest
0 голосов
/ 16 сентября 2018

Привет У меня возникли проблемы с небольшим количеством кода, который я получаю сообщение об ошибке типа TypeError: 'bool' object is not iterable Должен ли я использовать состояние if вместо оператора for?

Я пытаюсь добиться, если on_message сообщение было закреплено на 7 дней или более, а затем открепить это сообщение.

Вот с чем я работаю:

async def on_message(self, message):
    """Listen for a message then unpin any other messages older than 7 days"""
    server = message.server
    channelid = '490899209067823135'
    limit_date = datetime.now() - timedelta(days=7)
    if server:
        for message.content in message.channel.id == channelid:
            if limit_date:
                try:
                    await self.bot.unpin_message(message)

                except discord.Forbidden:
                    print("No permissions to do that!")

Не уверен, куда я тут иду.

Ответы [ 5 ]

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

Все ответы дают хорошее представление о том, почему ваш код не работает, но вот как вы можете реализовать то, что вы хотите:

async def on_message(self, message):
  """Listen for a message then unpin any other messages older than 7 days"""
  messages = await self.bot.pins_from(self.bot.get_channel('490899209067823135'))
  for msg in messages:
    if (datetime.now() - msg.timestamp).days > 7:
      try:
        await self.bot.unpin_message(msg)
  except discord.Forbidden:
    print("No permissions to do that!")
0 голосов
/ 16 сентября 2018

Как уже отмечали другие, поскольку message.channel.id == channelid либо возвращает True, либо False, ваш цикл for по сути становится либо для message.content в True или же для message.content в False

Я полагаю, что вы пытаетесь достичь здесь циклически по message с, чей message.channel.id равен channelid. Поскольку вы получаете один message, переданный в качестве аргумента функции on_message, вам вообще не нужен цикл, потому что у вас нет кратных message s для итерации по в on_message сам . Цикл должен быть снаружи, где вызывается on_message, то есть; или получите список message s, переданных в качестве аргумента.

Для вашего кода вы можете просто изменить

for message.content in message.channel.id == channelid:

до

if message.channel.id == channelid:
0 голосов
/ 16 сентября 2018

В вашем цикле for message.channel.id == channelid возвращает логическое значение либо True, либо False.Таким образом, ваш for цикл становится либо

for message.content in True

, либо

for message.content in False

. Правая часть in здесь должна быть несколько повторяемой.Компилятор жалуется, потому что это не так.

Чтобы предложить решение этой проблемы, нам нужна дополнительная информация о том, что вы пытаетесь сделать.

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

Проблема:

for message.content in message.channel.id == channelid:

== - это проверка , равны ли mess.age.channel.id и channelid, и поэтому ваши statemnts фактически становятся

for message.content in true:

или

for message.content in false:

Цикл for проходит через каждый элемент списка или похожую структуру, поэтому он не может принимать логическое значение после 'in'

Полагаю, что вы хотите отдельно назначить channelid для message.channel.id, а затем перебрать его. например, * 1 016 *

message.channel.id = channelid
for message.content in message.channel.id:
0 голосов
/ 16 сентября 2018

for message.content in message.channel.id == channelid:

Возможно, вы хотите иметь

if message.channel.id == channelid:
    for message.content in message.channel.id
...