Функция, которая брала сообщение из чата и писала в logs.txt

Рейтинг: 1Ответов: 1Опубликовано: 18.02.2023

Я бы хотел сделать функцию для моего бота, которая могла брать из разных чатов сообщение пользователя и писать в logs.txt. Вместо gm в

'w = logs.write('\n' + gm)' 

должна быть функция, которая записывает в 'logs.txt' в столбик с помощью ('\n') сообщения.

Есть проблема, сам gm выводит ошибку, что нужно конвертировать в str. Сам код не работает!

Это пример как мне бы хотелось.

import disnake  # библиотека похожая на discord.py
from disnake.ext import commands

bot = commands.Bot(command_prefix='/', intents=disnake.Intents.all())
client = disnake.Client()

gm = bot.get_message()

with open('logs.txt', 'a') as logs:
    w = logs.write('\n' + gm)


@bot.event
async def on_ready():
    print("George готов к работе ╰(*°▽°*)╯.")

bot.run('TOKEN')



    

Ответы

▲ 0Принят

Если я верно понял вопрос, то решение будет таким

import disnake
from disnake.ext import commands

bot = commands.Bot(command_prefix='/', intents=disnake.Intents.all())
client = disnake.Client()

@bot.event
async def on_message(message):
    global gm
    gm = message.content
    await write_to_file(gm)
    await bot.process_commands(message)

async def write_to_file(msg):
    with open('logs.txt', 'a') as logs:
        logs.write(msg + '\n')

@bot.event
async def on_ready():
    print("George готов к работе ╰(*°▽°*)╯.")

bot.run('TOKEN')

Новое сообщение будет сохраняться в переменной gm, оно передается в функцтю write_to_file и уже пишет в logs Если с кода выше будет лететь ошибка вот еще вариант

import disnake
from disnake.ext import commands

bot = commands.Bot(command_prefix='/', intents=disnake.Intents.all())

async def write_to_file(msg: str):
    with open('logs.txt', 'a') as logs:
        logs.write(f"{msg}\n")

@bot.event
async def on_message(message: disnake.Message):
    if message.author.bot:
        return  # игнорировать сообщения от ботов
    await write_to_file(message.content)
    await bot.process_commands(message)

@bot.event
async def on_ready():
    print("George готов к работе ╰(*°▽°*)╯.")

bot.run('TOKEN')