#python #discord.py
Вопрос:
Я пытался разобраться в этом некоторое время, но, учитывая, что я в основном просто объединяю код других людей и пытаюсь устранить неполадки, мне не хватает многих знаний, необходимых для этого.
Я пытаюсь создать бота, который, когда кто-то на сервере использует слово «the» в любом контексте (даже без префикса бота), исправляет их с помощью «da» (это шутка, пожалуйста, не поджаривайте меня за это, lmfao). С тем, что он делает, это может раздражать, поэтому я хотел бы, чтобы люди могли отключать его примерно на 5 минут за раз и не отправлять сообщения. Проблема в том, что у меня так мало опыта работы с python, что я в основном просто гадаю здесь. Как бы я мог создать команду, которая при срабатывании не позволяла бы боту отправлять сообщения в течение определенного промежутка времени?
Прямо сейчас способ отправки сообщений заключается в проверке того, содержит ли сообщение «the», поэтому можно ли также проверить что-то вроде того, верно ли логическое значение перед отправкой?
Вот основной блок кода, который отвечает за отправку. Я понимаю, что это, вероятно, неоптимально, и если вы так склонны, не стесняйтесь объяснить мне, как я мог бы сделать это лучше!
@client.event
async def on_message(message):
if message.author == client.user:
return
if ('the') in message.content:
await message.channel.send('i think you meant da :rolling_eyes:')
Спасибо!
(Кроме того, есть ли какой-либо способ, которым я мог бы заставить его ответить, только если «то» само по себе, а не в слове? Я попытался просто сделать так, чтобы в нем были пробелы до и после, но это не сработало, если сообщение начиналось или заканчивалось им. Я подумал, что это, вероятно, не оправдывает его собственного поста, так как я, вероятно, просто глупый лмао)
Комментарии:
1. используете ли вы
commands.Bot
илиdiscord.Client
?
Ответ №1:
Вы можете использовать глобальную переменную для хранения значения и редактирования его из разных мест
correct_the = True
@client.event
async def on_message(message):
global correct_the
if message.author == client.user:
return
words = message.content.lower().split(" ") # make a list of all words
# like this -> ["the", "dogs", "and", "cats"]
if 'the' in words:
if correct_the: # check if it should correct it
await message.channel.send('i think you meant da :rolling_eyes:')
if message.content.startswith("!disable"): # or make this as command if you use commands.Bot
if not correct_the:
print("already disabled")
else:
correct_the = False
await asyncio.sleep(5*60) # sleeps 5min
correct_the = True