after.channel
становится None когда Вы выходите из канала.
Пара замечаний:
1. Вы Египтянин? Если нет, то к чему эти пирамиды?
if voice_channel is not None and channel_category is not None:
if after.channel.id == voice_channel:
В данном контексте ровно тоже самое что и
if voice_channel and channel_category and after.channel.id == voice_channel:
2. Данный участок кода абсолютно бесполезен:
else:
pass
И по факту, лишь увеличивает время выполнения:
Python 3.8.1 (tags/v3.8.1:1b293b6, Dec 18 2019, 22:39:24) [MSC v.1916 32 bit (Intel)]
Type 'copyright', 'credits' or 'license' for more information
IPython 7.17.0 -- An enhanced Interactive Python. Type '?' for help.
In [1]: def test():
...: for i in range(0, 100):
...: if i%2:
...: 2+2
...: else:
...: pass
...:
In [2]: %timeit test()
14.4 µs ± 559 ns per loop (mean ± std. dev. of 7 runs, 100000 loops each)
In [3]: def test():
...: for i in range(0, 100):
...: if i%2:
...: 2+2
...:
In [4]: %timeit test()
13.6 µs ± 435 ns per loop (mean ± std. dev. of 7 runs, 100000 loops each)
3. События
voice_channel_update
в discord.py по умолчанию не существует, и если Вы не вызываете это событие сами, то Вы будете ждать его бесконечно