Улучшена система отложенных сообщений, добавлены вложения
This commit is contained in:
@@ -285,9 +285,11 @@ class MainBot(AnyBots):
|
|||||||
if self.task_start:
|
if self.task_start:
|
||||||
self.CheckDataBases.cancel()
|
self.CheckDataBases.cancel()
|
||||||
self.MakeBackups.cancel()
|
self.MakeBackups.cancel()
|
||||||
|
self.SendingDeferredMessages.cancel()
|
||||||
|
|
||||||
self.MakeBackups.start()
|
self.MakeBackups.start()
|
||||||
self.CheckDataBases.start()
|
self.CheckDataBases.start()
|
||||||
|
self.SendingDeferredMessages.start()
|
||||||
else:
|
else:
|
||||||
self.SendingDeferredMessages.start()
|
self.SendingDeferredMessages.start()
|
||||||
|
|
||||||
@@ -295,6 +297,7 @@ class MainBot(AnyBots):
|
|||||||
if self.task_start:
|
if self.task_start:
|
||||||
self.CheckDataBases.cancel()
|
self.CheckDataBases.cancel()
|
||||||
self.MakeBackups.cancel()
|
self.MakeBackups.cancel()
|
||||||
|
self.SendingDeferredMessages.cancel()
|
||||||
|
|
||||||
self.stop_event.set()
|
self.stop_event.set()
|
||||||
|
|
||||||
@@ -317,7 +320,7 @@ class MainBot(AnyBots):
|
|||||||
|
|
||||||
for message in messages:
|
for message in messages:
|
||||||
webhook = await self.fetch_webhook(message.webhook_id)
|
webhook = await self.fetch_webhook(message.webhook_id)
|
||||||
await webhook.send(await message.parse_message(self))
|
await webhook.send(**(await message.parse_message(self)))
|
||||||
|
|
||||||
await session.delete(message)
|
await session.delete(message)
|
||||||
|
|
||||||
|
|||||||
@@ -213,7 +213,7 @@ class AdminModule(commands.Cog):
|
|||||||
@commands.slash_command(name="запланировать_сообщение", description="Позволяет запланировать отправку анонсов и других сообщений")
|
@commands.slash_command(name="запланировать_сообщение", description="Позволяет запланировать отправку анонсов и других сообщений")
|
||||||
async def schedule_message(self, ctx: disnake.AppCmdInter,
|
async def schedule_message(self, ctx: disnake.AppCmdInter,
|
||||||
message_id: str = commands.Param(description="Укажите id сообщения, которое будет отложено", name="сообщение"),
|
message_id: str = commands.Param(description="Укажите id сообщения, которое будет отложено", name="сообщение"),
|
||||||
webhook_link: str = commands.Param(description="Укажите ссылку на вебхук, от которого будет отправлено сообщение(по умолчанию от лица бота)", name="вебхук", default=None),
|
webhook_link: str = commands.Param(description="Укажите ссылку на вебхук, от которого будет отправлено сообщение", name="вебхук"),
|
||||||
timestamp: int = commands.Param(description="Временная метка для отправки сообщения", name="таймстамп", default=None)):
|
timestamp: int = commands.Param(description="Временная метка для отправки сообщения", name="таймстамп", default=None)):
|
||||||
|
|
||||||
await ctx.response.defer()
|
await ctx.response.defer()
|
||||||
@@ -243,5 +243,7 @@ class AdminModule(commands.Cog):
|
|||||||
message = scheduled_message_model(source_channel_id=ctx.channel.id, source_message_id=int(message_id), webhook_id=webhook_id, timestamp=timestamp)
|
message = scheduled_message_model(source_channel_id=ctx.channel.id, source_message_id=int(message_id), webhook_id=webhook_id, timestamp=timestamp)
|
||||||
session.add(message)
|
session.add(message)
|
||||||
|
|
||||||
await ctx.edit_original_response(embed = self.client.SuccessEmbed(description = f'Успешно! Текст сообщения:\n {await message.parse_message(self.client)}', colour = 0xff9900))
|
await ctx.edit_original_response(embed = self.client.SuccessEmbed(description = f'Сообщение будет отправлено <t:{timestamp}:F>! Текст сообщения:', colour = 0xff9900))
|
||||||
|
mgs_parsed = await message.parse_message(self.client, preview=True)
|
||||||
|
await ctx.send(**mgs_parsed)
|
||||||
return 0
|
return 0
|
||||||
|
|||||||
@@ -1,3 +1,5 @@
|
|||||||
|
import io
|
||||||
|
import disnake
|
||||||
from sqlalchemy import Column, Integer, BigInteger, Text, Float, ForeignKey, UniqueConstraint, MetaData, Boolean
|
from sqlalchemy import Column, Integer, BigInteger, Text, Float, ForeignKey, UniqueConstraint, MetaData, Boolean
|
||||||
from sqlalchemy.orm import declarative_base, relationship, Mapped, mapped_column
|
from sqlalchemy.orm import declarative_base, relationship, Mapped, mapped_column
|
||||||
from sqlalchemy.ext.asyncio import create_async_engine, AsyncSession
|
from sqlalchemy.ext.asyncio import create_async_engine, AsyncSession
|
||||||
@@ -238,13 +240,28 @@ class ScheduledMessage(Base):
|
|||||||
webhook_id: Mapped[int | None] = mapped_column(BigInteger, nullable=True, index=True)
|
webhook_id: Mapped[int | None] = mapped_column(BigInteger, nullable=True, index=True)
|
||||||
timestamp: Mapped[float | None] = mapped_column(Float, nullable=True, index=True)
|
timestamp: Mapped[float | None] = mapped_column(Float, nullable=True, index=True)
|
||||||
|
|
||||||
async def parse_message(self, client):
|
async def parse_message(self, client, *, preview=False):
|
||||||
krekchat = await client.fetch_guild(client.krekchat.id)
|
krekchat = await client.fetch_guild(client.krekchat.id)
|
||||||
source_channel = await krekchat.fetch_channel(self.source_channel_id)
|
source_channel = await krekchat.fetch_channel(self.source_channel_id)
|
||||||
source_message = await source_channel.fetch_message(self.source_message_id)
|
source_message = await source_channel.fetch_message(self.source_message_id)
|
||||||
|
|
||||||
content = source_message.content
|
files = []
|
||||||
return content
|
for attachment in source_message.attachments:
|
||||||
|
file_bytes = await attachment.read()
|
||||||
|
files.append(disnake.File(io.BytesIO(file_bytes), filename=attachment.filename))
|
||||||
|
|
||||||
|
content = source_message.content if not preview else source_message.clean_content
|
||||||
|
|
||||||
|
def make_dict(**kwargs):
|
||||||
|
return kwargs
|
||||||
|
|
||||||
|
args = make_dict(content=content,
|
||||||
|
embeds=source_message.embeds,
|
||||||
|
components=source_message.components,
|
||||||
|
files=files if files else None
|
||||||
|
)
|
||||||
|
|
||||||
|
return args
|
||||||
|
|
||||||
all_data = {
|
all_data = {
|
||||||
'base': Base
|
'base': Base
|
||||||
|
|||||||
Reference in New Issue
Block a user