Client
У вас может быть только один on_message
, если у вас есть несколько, для on_message
. Вам просто нужно объединить три on_message
.
import discord
client = discord.Client()
@client.event
async def on_message(message):
print("in on_message #1")
print("in on_message #2")
print("in on_message #3")
client.run("TOKEN")
Как и любая переменная / функция Python (если декоратор не сохраняет вашу функцию, @client.event
делает это, сохраняя только самый последний обратный вызов) , если несколько имен одинаковы, последнее будет сохранено, а все остальные будут перезаписаны.
Это простой пример, который я написал, чтобы дать вам общее представление о том, как события в работе discord.py (обратите внимание: фактический код не совсем такой, как он переписан и значительно уменьшен).
class Client:
def event(self, func):
if func.__name__ == "on_message":
self.on_message_handle = func
return func
def receive_message(self, msg):
func = getattr(self, "on_message_handle", None)
if func is not None:
func(msg)
else:
self.process_commands(msg)
client = Client()
@client.event
def on_message(msg):
print("in on_message #1")
@client.event
def on_message(msg):
print("in on_message #2")
client.receive_message("hello")
# "in on_message #2"
Как вы видите client.event
, сохраняйте только один экземпляр on_message
.
Bot
экземпляры В качестве альтернативы, если вы используете расширение ext.commands
для discord.py, есть собственный способ иметь несколько обратных вызовов on_message
, Вы делаете это, используя их как listener
. Вы можете получить не более одного события on_message
и бесконечного количества слушателей on_message
.
from discord.ext import commands
bot = commands.Bot('.')
@bot.event
async def on_message(msg):
print("in on_message #1")
await bot.process_commands(msg) # so `Command` instances will still get called
@bot.listen()
async def on_message(msg):
print("in on_message #2")
@bot.listen()
async def on_message(msg):
print("in on_message #3")
bot.run("TOKEN")
Когда сообщение будет получено, все on_message #1-3
будут распечатаны.
Вы можете отключить переменную сеанса, используя:
session_unset
- освобождает все переменные сеанса (она равна использованию: $_SESSION = array();
) unset($_SESSION['Products']);
- Отменить только индекс продуктов в переменной сеанса. ( Помните : вы должны использовать как функцию, а не как вы использовали) session_destroy
- уничтожает все данные, зарегистрированные на сеанс Чтобы узнать разницу между использованием session_unset
и session_destroy
, прочитайте этот ответ SO . Это помогает.
Unset - это функция. Поэтому вы должны указать, какая переменная должна быть уничтожена.
unset($var);
В вашем случае
unset ($_SESSION["products"]);
Если вам нужно сбросить всю переменную сеанса, просто вызовите
session_destroy ();
Если вы полностью хотите очистить сеанс, вы можете использовать это:
session_unset();
session_destroy();
На самом деле оба они не обязательно, но это не повредит.
Если вы хотите только очистить я думаю, вам нужно это:
unset($_SESSION['Products']);
//or
$_SESSION['Products'] = "";
в зависимости от того, что вам нужно.
unset
- это функция, а не оператор. Используйте его, как unset($_SESSION['key']);
, чтобы отключить этот ключ сеанса. Однако вы можете использовать session_destroy();
. (Обязательно запустите сеанс с помощью session_start();
)