#python #discord #discord.py
#python #Discord #discord.py
Вопрос:
Итак, я создаю discord-бота для своего частного сервера с помощью python. Я хочу, чтобы она отвечала на сообщение при написании определенного сообщения, например, человек написал бы «Привет!», а бот ответил бы «Привет!». Я попробовал код @bot.event async def on_message(Hi!): await message.send("Hello!")
, но он не работает. Ошибка «имя «бот» не определено». Кто-нибудь из вас может помочь? Вот весь мой код ПРИМЕЧАНИЕ: ОН НА ЛИТОВСКОМ ЯЗЫКЕ, И ОН СРЕДИ НАС НА ТЕМУ `импорт раздора импорт случайный
from discord.ext import commands
from random import choice
client = commands.Bot(command_prefix = '/', help_command=None)
status = ['Žudau crewmates', 'Apsimetinėju :eyes:', 'Prižiūriu https://discord.gg/FNsBtsA']
@client.event
async def on_ready():
print('Imposteris pasiruošęs.')
@client.command()
async def komandos(ctx):
await ctx.send(f'/ping - parodo jūsų interneto greitį, /patarimas - botas duoda patarimą Among Us žaidimui, /meme - Duoda kokį nors among us meme.')
@client.command()
async def ping(ctx):
await ctx.send(f'Pong! {round(client.latency * 1000)}ms')
@client.command()
async def patarimas(ctx):
choices = ["Jei nori būti imposter, pasirink orandžinę spalvą. Ši spalva turi netgi 15.48% tapti imposter. Mažiausiai šansų turintis tėra violetinis. Jis turi tik 3.8%, kad tapti imposter.", "Jei nori kažką nužudyti nueik į admin, susirask tolimiausia nuo electrical, uždaryk savo auką su durimis, išjunk šviesas. Taip gausi kill'ą.", "Jei esi crewmate, niekuo nepasitikėk nebengi žmogus padarė visual task'ą (nesvarbu ar bar pakilo ar ne). Jei esi sus, sakyk, kad turi visual task'ą (jeigu aišku tokį turi).", "Jeigu matai žmogų kuris daro cardswipe, o tu jo neturi, jis bus imposteris. Tai common task'as, jį gali turėti visi arba niekas.", "Pati saugiausia vieta The Skeld žemelapyje yra communications. Ten retai kas užeina. O Polus saugiausia vieta pats startas. Mira HQ saugiausia vieta yra communications "]
ranpatarimas = random.choice(choices)
await ctx.send(ranpatarimas)
@client.command()
async def meme(ctx):
choices = ["https://imgur.com/a/MvYabuk", "https://imgur.com/a/cKEp545", "https://imgur.com/a/5D4XVLl", "https://imgur.com/a/6IioFXt", "https://imgur.com/a/KdVz4WE", "https://imgur.com/a/BlLPvvc", "https://imgur.com/a/aKEMcfO", "https://imgur.com/a/e7Mnu9t", "https://imgur.com/a/sVfVodl", "https://imgur.com/a/F9Zz4A0", "https://imgur.com/a/vbCDxww", "https://imgur.com/a/3K0AHR3"]
ranmeme = random.choice(choices)
await ctx.send(ranmeme)
@bot.event
async def on_message(mirk):
await message.send("NE! Mano mačas dar nesibaigė, o impostorium aš vis dar esu. Palauk prašau kol visus išžudysiu arba bent jau kai būsiu išvoteintas :slight_frown:)")
client.run(<TOKEN>)```
Комментарии:
1. Измените свой токен сейчас.
Ответ №1:
Это простой код, просто чтобы понять идею.
@bot.event
async def on_message(message):
if message.author == bot.user: # skip bot messages
return
# write all possible words in lower case.
if message.content.lower() in ['hey', 'hi', 'hello']:
await message.channel.send('Hello!')
await bot.process_commands(message) # to allow other commands
Рефранс, но не для бота, а для клиента, это то же самое.
Ответ №2:
Ваше текущее решение будет отвечать на каждое сообщение, отправленное на ваш сервер или на ваш бот-dm, независимо от его содержания. Вы можете просто проверить это.
@client.event
async def on_message(message):
if message.author == client.user:
return
if message.content.lower() == 'hi!':
await message.channel.send('Hi there')
await client.process_commands(message)
И измените свой токен, сейчас
Ссылка:
Редактировать:
Отвечая на ваш комментарий, вот как проверить, есть ли какое-либо слово в содержимом сообщения
if any(word in message.content.lower() for word in ['hi', 'hello!']):
await message.channel.send('Hi there')
# or
if message.content.lower().startswith(['hi', 'hello!']):
await message.channel.send('Hi there')
Комментарии:
1. Спасибо за вашу помощь. Я действительно одобряю это, хотя я не понимаю, как добавить несколько слов, таких как:
if message.content.lower()== 'hi', 'hello!':
и у них был бы один и тот же ответ. Возможно ли это как-то? Я пытался, но это не сработало :/2. Проверьте редактирование, также не забудьте принять ответ, если это помогло.