Compare commits

..

No commits in common. "dev" and "main" have entirely different histories.
dev ... main

12 changed files with 9 additions and 339 deletions

View File

@ -1 +0,0 @@
from .message_events import MessageEvents

View File

@ -1,5 +0,0 @@
from enum import Enum
class MessageEvents(Enum):
WEATHER_FORECAST = 0

View File

@ -14,9 +14,6 @@ class PycordBot(LibPycordBot):
self.client_session = ClientSession()
if self.scheduler is None:
return
# Scheduler job for DHL parcel tracking
self.scheduler.add_job(
update_tracks_dhl,
@ -43,8 +40,6 @@ class PycordBot(LibPycordBot):
async def close(self, *args: Any, **kwargs: Any) -> None:
await self.client_session.close()
if self.scheduler is not None:
self.scheduler.shutdown()
self.scheduler.shutdown()
await super().close(*args, **kwargs)

View File

@ -1,9 +0,0 @@
from dataclasses import dataclass
@dataclass
class PycordGuildColors:
default: str
success: str
warning: str
error: str

View File

@ -1,94 +0,0 @@
{
"actions": {
"bite": {
"name": "Вкусити",
"text": "**{user_name}** робить кусь **{target_name}**"
},
"poke": {
"name": "Тикнути",
"text": "**{user_name}** тикає в **{target_name}**"
},
"hug": {
"name": "Обійняти",
"text": "**{user_name}** обіймає **{target_name}**"
},
"kiss": {
"name": "Поцілувати",
"text": "**{user_name}** цілує **{target_name}**"
},
"lick": {
"name": "Лизнути",
"text": "**{user_name}** лиже **{target_name}**"
},
"pat": {
"name": "Погладити",
"text": "**{user_name}** гладить **{target_name}**"
},
"wave": {
"name": "Помахати",
"text": "**{user_name}** махає **{target_name}**"
},
"wink": {
"name": "Підморгнути",
"text": "**{user_name}** підморгує **{target_name}**"
}
},
"messages": {
"welcome": {
"morning": [
"{0} Добрий ранок та ласкаво просимо! {1}",
"{0} Доброго ранку та ласкаво просимо! {1}",
"{0} Вітаннячко! Ласкаво просимо! {1}",
"{0} Доброго ранку! Ласкаво просимо! {1}"
],
"midday": [
"{0} Добрий день! Ласкаво просимо! {1}",
"{0} Добридень! Ласкаво просимо! {1}",
"{0} День добрий! Ласкаво просимо! {1}",
"{0} Мої вітання! Ласкаво просимо! {1}",
"{0} Здоровенькі були! Ласкаво просимо! {1}",
"{0} Раді вітати вас! Ласкаво просимо! {1}",
"{0} Доброго здоров’ячка! Ласкаво просимо! {1}"
],
"evening": [
"{0} Добрий вечір! Ласкаво просимо! {1}",
"{0} Доброго вечора! Ласкаво просимо! {1}",
"{0} Добривечір! Ласкаво просимо! {1}",
"{0} Доброго вечора та ласкаво просимо! {1}",
"{0} Добрий вечір та ласкаво просимо! {1}"
],
"night": [
"{0} Доброї ночі! Ласкаво просимо! {1}",
"{0} Здоровенькі були! Ласкаво просимо! {1}"
],
"unknown": [
"{0} Вітаннячко! Ласкаво просимо! {1}"
]
}
},
"tracking": {
"dhl": {
"statuses": {
"delivered": "Доставлено",
"transit": "Транзит",
"pre-transit": "Пре-транзит",
"failure": "Невдача"
},
"messages": {
"DHL PAKET (parcel)": "DHL PAKET (посилка)",
"The shipment was prepared for onward transport.": "Вантаж підготовлено до подальшого транспортування.",
"Warenpost (Merchandise Shipment)": "Варенпост (відвантаження товарів)",
"The shipment has been processed in the parcel center": "Відправлення пройшло обробку в посилковому центрі",
"Unfortunately, the shipment could not be delivered today due to a strike action.": "На жаль, сьогодні вантаж не вдалося доставити через страйк.",
"Die Sendung wurde von DHL abgeholt.": "Відправлення забрала компанія DHL.",
"The shipment has been successfully delivered": "Відправлення успішно доставлено",
"The shipment could not be delivered, and the recipient has been notified": "Відправлення не вдалося доставити, одержувача було повідомлено про це",
"The shipment has been loaded onto the delivery vehicle": "Вантаж завантажено на транспортний засіб доставки",
"The shipment arrived in the region of recipient and will be transported to the delivery base in the next step.": "Відправлення прибуло в регіон одержувача і буде доставлено на базу доставки на наступному кроці",
"The shipment has been processed in the parcel center of origin": "Відправлення оброблено в центрі відправлення посилок",
"The shipment has been posted by the sender at the retail outlet": "Відправлення відправлено відправником у торговій точці",
"The instruction data for this shipment have been provided by the sender to DHL electronically": "Дані інструкцій для цього відправлення були надані DHL відправником в електронному вигляді"
}
}
}
}

View File

@ -1,94 +0,0 @@
{
"messages": {
"welcome": {
"morning": [
"{0} Good morning and welcome! {1}",
"{0} Доброго ранку та ласкаво просимо! {1}",
"{0} Вітаннячко! Ласкаво просимо! {1}",
"{0} Доброго ранку! Ласкаво просимо! {1}"
],
"midday": [
"{0} Good day and welcome! {1}",
"{0} Добридень! Ласкаво просимо! {1}",
"{0} День добрий! Ласкаво просимо! {1}",
"{0} Мої вітання! Ласкаво просимо! {1}",
"{0} Здоровенькі були! Ласкаво просимо! {1}",
"{0} Раді вітати вас! Ласкаво просимо! {1}",
"{0} Доброго здоров’ячка! Ласкаво просимо! {1}"
],
"evening": [
"{0} Good evening and welcome! {1}",
"{0} Доброго вечора! Ласкаво просимо! {1}",
"{0} Добривечір! Ласкаво просимо! {1}",
"{0} Доброго вечора та ласкаво просимо! {1}",
"{0} Добрий вечір та ласкаво просимо! {1}"
],
"night": [
"{0} Good night and welcome! {1}",
"{0} Здоровенькі були! Ласкаво просимо! {1}"
],
"unknown": [
"{0} Hello and welcome! {1}"
]
}
},
"actions": {
"bite": {
"name": "Bite",
"text": "**{user_name}** bites **{target_name}**"
},
"hug": {
"name": "Hug",
"text": "**{user_name}** hugs **{target_name}**"
},
"kiss": {
"name": "Kiss",
"text": "**{user_name}** kisses **{target_name}**"
},
"lick": {
"name": "Lick",
"text": "**{user_name}** licks **{target_name}**"
},
"pat": {
"name": "Pat",
"text": "**{user_name}** pats **{target_name}**"
},
"poke": {
"name": "Poke",
"text": "**{user_name}** pokes **{target_name}**"
},
"wave": {
"name": "Wave",
"text": "**{user_name}** waves **{target_name}**"
},
"wink": {
"name": "Wink",
"text": "**{user_name}** winks **{target_name}**"
}
},
"tracking": {
"dhl": {
"statuses": {
"delivered": "Delivered",
"transit": "Transit",
"pre-transit": "Pre-transit",
"failure": "Failure"
},
"messages": {
"DHL PAKET (parcel)": "DHL PAKET (parcel)",
"The shipment was prepared for onward transport.": "The shipment was prepared for onward transport.",
"Warenpost (Merchandise Shipment)": "Warenpost (Merchandise Shipment)",
"The shipment has been processed in the parcel center": "The shipment has been processed in the parcel center",
"Unfortunately, the shipment could not be delivered today due to a strike action.": "Unfortunately, the shipment could not be delivered today due to a strike action.",
"Die Sendung wurde von DHL abgeholt.": "The shipment has been picked up by DHL.",
"The shipment has been successfully delivered": "The shipment has been successfully delivered",
"The shipment could not be delivered, and the recipient has been notified": "The shipment could not be delivered, and the recipient has been notified",
"The shipment has been loaded onto the delivery vehicle": "The shipment has been loaded onto the delivery vehicle",
"The shipment arrived in the region of recipient and will be transported to the delivery base in the next step.": "The shipment arrived in the region of recipient and will be transported to the delivery base in the next step.",
"The shipment has been processed in the parcel center of origin": "The shipment has been processed in the parcel center of origin",
"The shipment has been posted by the sender at the retail outlet": "The shipment has been posted by the sender at the retail outlet",
"The instruction data for this shipment have been provided by the sender to DHL electronically": "The instruction data for this shipment have been provided by the sender to DHL electronically"
}
}
}
}

View File

@ -38,7 +38,7 @@
"text": "**{user_name}** робить кусь **{target_name}**"
},
"hug": {
"name": "Обійняти",
"name": "",
"text": "**{user_name}** обіймає **{target_name}**"
},
"kiss": {

View File

@ -24,7 +24,6 @@ db_client = AsyncClient(con_string)
db: AsyncDatabase = db_client.get_database(name=db_config["name"])
col_users: AsyncCollection = db.get_collection("users")
col_messages: AsyncCollection = db.get_collection("messages")
col_warnings: AsyncCollection = db.get_collection("warnings")
col_checkouts: AsyncCollection = db.get_collection("checkouts")
col_trackings: AsyncCollection = db.get_collection("trackings")

View File

@ -1,6 +0,0 @@
def hex_to_int(hex_color: str) -> int:
return int(hex_color.lstrip("#"), 16)
def int_to_hex(integer_color: int) -> str:
return "#" + format(integer_color, "06x")

View File

@ -1,9 +0,0 @@
from typing import Any, Dict
def parse_weather(api_response: Dict[str, Any]) -> str:
return ""
def parse_weather_current(api_response: Dict[str, Any]) -> str:
return ""

View File

@ -1,106 +0,0 @@
from datetime import datetime
import logging
from typing import Any, Dict, List
from discord import Embed
from pymongo import DESCENDING
from pytz import timezone
from classes.enums import MessageEvents
from classes.pycordbot import PycordBot
from ujson import loads
from modules.utils import hex_to_int
from database import col_messages
from modules.weather.parser import parse_weather
# Example guild key
# "forecast": {
# "channel": 0,
# "time": "10:00:00",
# "delete_previous": true
# "locations": [{"name": "Sample Location", "location": [10.000, 20.000]}],
# }
logger = logging.getLogger(__name__)
async def report_weather(
bot: PycordBot,
guild: PycordGuild, # TODO
channel_id: int,
delete_previous: bool,
locations: List[Dict[str, Any]],
) -> None: # sourcery skip: aware-datetime-for-utc
channel = bot.get_channel(channel_id)
if channel is None:
logger.error(
"Cannot generate weather report for %s's channel %s because channel was not found.",
guild.id,
channel_id,
)
return
# Find and delete previous forecast, if needed
if delete_previous:
async for event in col_messages.find(
{
"event": MessageEvents.WEATHER_FORECAST,
"guild": guild.id,
"channel": channel_id,
},
limit=1,
).sort("date", direction=DESCENDING):
try:
old_message = bot.get_message(event["message"])
if old_message is not None:
await old_message.delete(
reason="Cleanup of the old weather report (look in guild config for details)"
)
except Exception as exc:
logger.warning(
"Could not delete the previous weather report in %s' channel %s due to %s",
guild.id,
channel_id,
exc,
)
embeds: List[Embed] = []
# Iterate through the locations and request their forecasts.
# Results must be parsed and added as embeds to the embeds lits.
for location in locations:
location_timezone_offset = ":".join(
str(
timezone(bot.config["bot"]["timezone"]).utcoffset(datetime.utcnow())
).split(":")[:2]
)
api_response = await (
await bot.client_session.get(
f"https://api.openweathermap.org/data/2.5/onecall?lat={location['location'][0]}&lon={location['location'][1]}&exclude=minutely&units=metric&lang=uk&appid={bot.config['modules']['weather']['forecasts']['api_key']}&tz={location_timezone_offset}"
)
).json(loads=loads)
parsed_weather = parse_weather(api_response)
embeds.append(
Embed(
title=location["name"],
description=parsed_weather,
color=hex_to_int(guild.colors.default),
)
)
# Add a trailing embed with OWM information
embeds.append(
Embed(
title=bot._("weather_report_title", "embeds"),
description=bot._("weather_report_description", "embeds"),
color=hex_to_int(guild.colors.default),
)
)
await channel.send( # type: ignore
content=bot._("weather_report_content", "messages"), embeds=embeds
)

View File

@ -1,12 +1,12 @@
aiohttp>=3.6.0
apscheduler~=3.11.0
async_pymongo==0.1.11
apscheduler~=3.10.4
colorthief==0.2.1
deepl==1.19.1
fastapi[all]~=0.115.0
mongodb-migrations==1.3.1
deepl==1.16.1
fastapi[all]~=0.109.1
mongodb-migrations==1.3.0
pynacl~=1.5.0
pyrmv==0.4.0
pyrmv==0.3.5
pytz~=2024.1
--extra-index-url https://git.end-play.xyz/api/packages/profitroll/pypi/simple
libbot[speed,pycord]==3.2.3
async_pymongo==0.1.4
libbot[speed,pycord]==3.0.0