Я пытаюсь сделать разлад 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
Может ли кто-нибудь помочь?
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
talk
сопрограмму. Это не будет без учета регистра, хотя. Хотя уже есть несколько веток о том, как этого добиться.