Дискорд бот работает не целостно
Вот пример кода:
import vk_api
from vk_api.longpoll import VkEventType, VkLongPoll
import discord
from discord.ext import commands
import asyncio
client = commands.Bot(command_prefix='!', intents=discord.Intents.all())
@client.event
async def on_ready():
print('Бот подключен к Discord!')
@client.event
async def on_message(message):
if message.author == client.user:
return
@client.command()
async def привет(ctx):
await ctx.send('Привет!')
login = 'login'
password = 'password'
api_version = 'api'
chat_id = 1
chat_id2 = 2
vk_session = vk_api.VkApi(login, password, app_id=api_version)
vk_session.auth()
vk = vk_session.get_api()
longpoll = VkLongPoll(vk_session)
async def disbot():
for event in longpoll.listen():
if event.type == VkEventType.MESSAGE_NEW and event.from_chat and event.chat_id == chat_id:
user_id = event.user_id
message = event.text
attachments = event.attachments
user_info = vk.users.get(user_ids=user_id)
user_name = user_info[0]['first_name'] + ' ' + user_info[0]['last_name']
await client.wait_until_ready()
channel = client.get_channel(id1)
if '@all' in message:
if 'attach1_type' in attachments:
await channel.send(f"{user_name} » {message} [Вложение] @everyone")
else:
await channel.send(f"{user_name} » {message} @everyone")
else:
if 'attach1_type' in attachments:
await channel.send(f"{user_name} » {message} [Вложение]")
else:
await channel.send(f"{user_name} » {message}")
elif event.type == VkEventType.MESSAGE_NEW and event.from_chat and event.chat_id == chat_id2:
user_id = event.user_id
message = event.text
attachments = event.attachments
user_info = vk.users.get(user_ids=user_id)
user_name = user_info[0]['first_name'] + ' ' + user_info[0]['last_name']
await client.wait_until_ready()
channel = client.get_channel(id2)
if 'attach1_type' in attachments:
await channel.send(f"{user_name} » {message} [Вложение] @everyone")
else:
await channel.send(f"{user_name} » {message} @everyone")
async def main():
async with client:
client.loop.create_task(disbot())
await client.start('Token')
asyncio.run(main())
Сделал пересылку сообщений из вк в дискорд и решил добавить пару команд в бота, но как не пытался вместе эти задачи не выполняются.
Ответы (1 шт):
Возможно, ваш код сейчас пытается использовать два разных метода обработки событий: один через библиотеку discord.py и другой через библиотеку asyncio.
Для того чтобы оба этих асинхронных процесса работали вместе, вам нужно внести следующие изменения:
Удали использование asyncio.run(main()) и замените его на client.run('Token') для запуска бота discord.py.
Объедините вашу функцию disbot() с обработчиками событий discord.py.
Лучше не использовать await client.wait_until_ready() в цикле обработки событий VK, подождите, пока клиент Discord готов к работе перед началом обработки событий VK.
Вот:
# Ваши импорты и остальное...
@client.event
async def on_ready():
print('Бот подключен к Discord!')
await disbot()
async def disbot():
# Здесь твой код обработки событий VK
pass
@client.command()
async def привет(ctx):
await ctx.send('Привет!')
# Запуск бота Discord
client.run('Token')