поскольку ваш бот реагирует на
все сообщения, которые видит в текстовых каналах, он реагирует также и на свои собственные: сначала на «@GHOST, значение по ключу тест», потом на «@test_bot, Такого ключа нет», и так до бесконечности.
достаточно будет добавить проверку на бота в начале:
@bot.event
async def on_message(message):
if message.author == bot.user:
return
data = CFG.get('Recipes')
text = message.content.lower()
for key, value in data.items():
if text == key.lower():
print(value)
await message.channel.send(f'{message.author.mention}, {value}')
break
else:
print('ОШИБКА')
await message.channel.send(f'{message.author.mention}, Такого рецепта нет')