Уничтожьте определенную $ _SESSION [дубликат]

Это невозможно с помощью нативного 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 будут распечатаны.

18
задан Ali 2 June 2016 в 09:07
поделиться

4 ответа

Вы можете отключить переменную сеанса, используя:

  1. session_unset - освобождает все переменные сеанса (она равна использованию: $_SESSION = array();)
  2. unset($_SESSION['Products']); - Отменить только индекс продуктов в переменной сеанса. ( Помните : вы должны использовать как функцию, а не как вы использовали)
  3. session_destroy - уничтожает все данные, зарегистрированные на сеанс

Чтобы узнать разницу между использованием session_unset и session_destroy, прочитайте этот ответ SO . Это помогает.

36
ответ дан Community 26 August 2018 в 05:20
поделиться

Unset - это функция. Поэтому вы должны указать, какая переменная должна быть уничтожена.

unset($var);

В вашем случае

unset ($_SESSION["products"]);

Если вам нужно сбросить всю переменную сеанса, просто вызовите

session_destroy ();
5
ответ дан Don D 26 August 2018 в 05:20
поделиться

Если вы полностью хотите очистить сеанс, вы можете использовать это:

session_unset();
session_destroy();

На самом деле оба они не обязательно, но это не повредит.

Если вы хотите только очистить я думаю, вам нужно это:

unset($_SESSION['Products']);
//or
$_SESSION['Products'] = "";

в зависимости от того, что вам нужно.

2
ответ дан JRsz 26 August 2018 в 05:20
поделиться

unset - это функция, а не оператор. Используйте его, как unset($_SESSION['key']);, чтобы отключить этот ключ сеанса. Однако вы можете использовать session_destroy();. (Обязательно запустите сеанс с помощью session_start();)

1
ответ дан mehulmpt 26 August 2018 в 05:20
поделиться
Другие вопросы по тегам:

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