#python #discord #bots
Вопрос:
Итак, в качестве праздничного проекта я пытаюсь создать двух ботов, которые будут отвечать на сообщения друг друга. Они проверят идентификатор отправителя, и если он совпадает с идентификатором другого бота, он отправит сообщение с тем количеством раз, когда бот ответил.
Проблема в том, что, когда я пытаюсь выполнить это, оба бота отправляют два сообщения, и количество не превышает 1.
Вот мой код:
import discord
import time
TOKEN = #BOT TOKEN#
client = discord.Client()
@client.event
async def on_ready():
print(f'{client.user} has connected to Discord!')
@client.event
async def on_message(message):
if message.author == client.user:
return
tally = 0
if message.author.id == 887901692673261618:
tally = 1
time.sleep(5)
await message.channel.send(tally)
client.run(TOKEN)
Я попытался определить переменную tally под определением токена и клиента, но затем в ней говорится, что на нее ссылаются перед назначением
Комментарии:
1.
tally
устанавливается равным 0 при каждом вызовеon_message
. Сохраните это число как глобальную переменную и не устанавливайте его равным нулю в этом методе?
Ответ №1:
В каждом сообщении вы устанавливаете значение переменной подсчета в 0. Это сброс счетчика, и, следовательно, он не увеличивается
Что касается переменной, на которую ссылаются перед назначением, вы должны определить ее над функцией для ясности. Определение его в любом месте до client.run
этого сработает, но не после client.run
, так client.run
как блокирует дальнейшее выполнение кода, если бот не будет остановлен, поэтому ваша переменная определяется после закрытия бота, а не во время его работы, поэтому ошибка. Теперь
- Вы можете использовать ключевое слово global для изменения значения переменной, определенной вне функции
- Вы можете установить tally в качестве атрибута клиента, это избавит вас от необходимости использовать глобальное ключевое слово
Пример установки его в качестве атрибута client
import discord
import time
TOKEN = #BOT TOKEN#
client = discord.Client()
client.tally = 0
@client.event
async def on_ready():
print(f'{client.user} has connected to Discord!')
@client.event
async def on_message(message):
if message.author == client.user:
return
if message.author.id == 887901692673261618:
client.tally = 1
time.sleep(5)
await message.channel.send(client.tally)
client.run(TOKEN)
Пример установки его в качестве глобальной переменной
import discord
import time
TOKEN = #BOT TOKEN#
client = discord.Client()
tally = 0
@client.event
async def on_ready():
print(f'{client.user} has connected to Discord!')
@client.event
async def on_message(message):
global tally
if message.author == client.user:
return
if message.author.id == 887901692673261618:
tally = 1
time.sleep(5)
await message.channel.send(tally)
client.run(TOKEN)
Подумайте о том, чтобы узнать больше о переменных областях в python