Создание Discord Bot в Python: Как сделать разговор о переключателе для ChatBot

1

Я пытаюсь сделать разлад ChatBot на Python, и, похоже, я столкнулся с проблемой. Я делаю переключатель и выключен, чтобы заставить его говорить, но всякий раз, когда я переключаю этот переключатель, он говорит, что "говорить" не распознается как команда. Я даже попытался сделать это @client.event вместо @client.command, но это не сработает. Пожалуйста помоги.

import discord
from discord.ext.commands import Bot
from discord.ext import commands
import asyncio
import time
Client = discord.Client()
client = commands.Bot(command_prefix = ":")
on_talk = False
@client.event
async def on_ready():
print("You can talk to me now!")
@client.command
async def talk(message):
    global on_talk
    if message.content.upper().startswith(":TALK"):
        on_talk = True
    if message.content.upper().startswith(":STOPTALK"):
        on_talk = False
if on_talk == False:
    print("on_talk is set to False")
if on_talk == True:
    print("It works")

EDIT: функция разговора работает, но я не могу заставить функцию stoptalk работать. Я попытался это сделать.

import discord
from discord.ext.commands import Bot
from discord.ext import commands
import asyncio
import time
Client = discord.Client()
client = commands.Bot(command_prefix = ":")
on_talk = False
@client.event
async def on_ready():
    print("You can talk to me now!")
@client.command(pass_context=True)
async def ontalker(message):
    global on_talk
    if message.content.upper().startswith(":TALK"):
        on_talk = True

@client.command(pass_context=True)
async def offtalker(message):    
    global ontalk
    if message.content.upper().startswith(":STOPTALK"):
        on_talk = False


@client.command(pass_context=True)
async def stoptalk(ctx):
    print("on_talk is False.")

@client.command(pass_context=True)
async def talk(ctx):
    everything i want to do

Может ли кто-нибудь помочь?

Теги:
discord
discord.py

1 ответ

0
Лучший ответ

client.command возвращает декоратор, поэтому вы должны называть его при оформлении сопрограммы. Если вы хотите передать сообщение, вы должны указать pass_context=True и получить доступ к сообщению через ctx.message.

@client.command(pass_context=True)
async def talk(ctx):
    global on_talk
    on_talk = True


@client.command(pass_context=True)
async def stoptalk(ctx):
    global on_talk
    on_talk = False
  • 0
    Таким образом, я заменяю @ client.command, который у меня был, и вставляю это вместо этого?
  • 0
    Это заменит всю вашу talk сопрограмму. Это не будет без учета регистра, хотя. Хотя уже есть несколько веток о том, как этого добиться.
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню