Reged1t
@Reged1t
Учу Python и пишу на нëм, а также делаю ботов в дс

Где тут ошибка?

@commands.Cog.listener()
	async def on_voice_state_update(self, member, before, after):
		t1 = 1
		print("Work")
		while True:
			if before.channel is None and after.channel is not None:
					t1 = t1 + 1
					print(t1)
					await asyncio.sleep(1)
			elif before.channel is not None and after.channel is None:
					print("done")
					break


Где тут ошбика? Первый раз срабатывает второй раз уже нет
  • Вопрос задан
  • 65 просмотров
Решения вопроса 1
Vindicar
@Vindicar
RTFM!
Не хочется ругаться матом, поэтому напишу на питоне
class MyCog (commands.Cog):
    def __init__(self, bot):
        self.enter_times = {}
    @commands.Cog.listener()
    async def on_voice_state_update(self, member, before, after):
        if before.channel is None and after.channel is not None:
            #событие входа в чат - кладем время входа в словарь
            self.enter_times[member.id] = time.time() #число секунд от начала эпохи Unix
        elif before.channel is not None and after.channel is None:
            #событие выхода из чата - вытаскиваем время входа и удаляем его из словаря
            enter = self.enter_times.pop(member.id, None) 
            if enter is not None: # мало ли, бота перезапустили пока кто-то сидел в войсчате
                delta = time.time() - enter # число секунд с момента входа
                print(f'member {member.id}: {delta:.1f} seconds')
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
dimonchik2013
@dimonchik2013
non progredi est regredi
всегда делай только первый раз
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы