Compare commits

..

No commits in common. "090f217f93dbc5a0af3c80cc2013484391f6f47b" and "2dc60acaa699f1d3bacd05f6db0c705c913c8797" have entirely different histories.

6 changed files with 16 additions and 40 deletions

View File

@ -38,7 +38,7 @@ class MassMoveCommand(DiscordCommandABC):
self, self,
ctx: Context, ctx: Context,
channel_to: discord.VoiceChannel, channel_to: discord.VoiceChannel,
channel_from: Transform[discord.VoiceChannel, VoiceChannelTransformer] = None, channel_from: Transform[str, VoiceChannelTransformer] = None,
): ):
self._logger.debug(__name__, f"Received command mass-move {ctx}") self._logger.debug(__name__, f"Received command mass-move {ctx}")

View File

@ -58,22 +58,14 @@ class BaseOnVoiceStateUpdateEvent(OnVoiceStateUpdateABC):
return return
try: try:
settings: ServerConfig = self._config.get_configuration(f"ServerConfig_{server.discord_id}")
if joined: if joined:
active_joins = self._user_joins_vc.find_active_user_joined_voice_channels_by_user_id(user.id)
for join in active_joins:
join.leaved_on = datetime.now()
user.xp += round(join.time * settings.xp_per_ontime_hour)
self._user_joins_vc.update_user_joined_voice_channel(join)
self._users.update_user(user)
self._db.save_changes()
join = UserJoinedVoiceChannel(user, channel_id, datetime.now()) join = UserJoinedVoiceChannel(user, channel_id, datetime.now())
self._user_joins_vc.add_user_joined_voice_channel(join) self._user_joins_vc.add_user_joined_voice_channel(join)
self._db.save_changes() self._db.save_changes()
return return
settings: ServerConfig = self._config.get_configuration(f"ServerConfig_{server.discord_id}")
join = self._user_joins_vc.get_active_user_joined_voice_channel_by_user_id(user.id) join = self._user_joins_vc.get_active_user_joined_voice_channel_by_user_id(user.id)
join.leaved_on = datetime.now() join.leaved_on = datetime.now()

View File

@ -25,7 +25,7 @@ class VoiceChannelTransformer(Transformer):
return [ return [
app_commands.Choice( app_commands.Choice(
name=f"{vc.name}" if vc.category is None else f"{vc.name}: {vc.category.name}", name=f"{vc.name}" if vc.category is None else f"{vc.name}: {vc.category.name}",
value=str(vc.id), value=vc.name,
) )
for vc in get_client_utils().get_auto_complete_list(voice_channels, current, lambda x: x.name) for vc in get_client_utils().get_auto_complete_list(voice_channels, current, lambda x: x.name)
] ]

View File

@ -64,8 +64,6 @@ class ScheduledEventsWatcher(TaskABC):
elif interval == ScheduledEventIntervalEnum.yearly: elif interval == ScheduledEventIntervalEnum.yearly:
ts = ts + timedelta(days=365) ts = ts + timedelta(days=365)
if ts < now:
return self._append_interval(interval, ts)
return ts return ts
@tasks.loop(hours=24) @tasks.loop(hours=24)

View File

@ -31,9 +31,7 @@
<div class="content-column"> <div class="content-column">
<div class="content-data-name">{{'view.server.profile.xp' | translate}}:</div> <div class="content-data-name">{{'view.server.profile.xp' | translate}}:</div>
<div *ngIf="!isEditing" class="content-data-value">{{user.xp}}</div> <div *ngIf="!isEditing" class="content-data-value">{{user.xp}}</div>
<div *ngIf="isModerator && isEditing" class="content-data-value"><input class="table-edit-input" pInputText <div *ngIf="isModerator && isEditing" class="content-data-value"><input class="table-edit-input" pInputText min="0" type="number" [(ngModel)]="user.xp"></div>
min="0" type="number"
[(ngModel)]="user.xp"></div>
</div> </div>
</div> </div>
@ -73,8 +71,7 @@
<div class="content-data-name">{{'view.server.profile.level' | translate}}:</div> <div class="content-data-name">{{'view.server.profile.level' | translate}}:</div>
<div *ngIf="!isEditing" class="content-data-value">{{user.level?.name}}</div> <div *ngIf="!isEditing" class="content-data-value">{{user.level?.name}}</div>
<div *ngIf="isModerator && isEditing" class="content-data-value"> <div *ngIf="isModerator && isEditing" class="content-data-value">
<p-dropdown [options]="levels" [(ngModel)]="user.level" dataKey="id" <p-dropdown [options]="levels" [(ngModel)]="user.level" dataKey="id" placeholder="{{'common.level' | translate}}">
placeholder="{{'common.level' | translate}}">
</p-dropdown> </p-dropdown>
</div> </div>
</div> </div>
@ -103,8 +100,7 @@
<div> <div>
<div class="content-divider"></div> <div class="content-divider"></div>
<p-table #dt [value]="(user.userWarnings ?? [])" [responsive]="true" responsiveLayout="stack" <p-table #dt [value]="(user.userWarnings ?? [])" [responsive]="true" responsiveLayout="stack" [breakpoint]="'720px'" dataKey="id" editMode="row">
[breakpoint]="'720px'" dataKey="id" editMode="row">
<ng-template pTemplate="caption"> <ng-template pTemplate="caption">
<div class="table-caption"> <div class="table-caption">
<div class="table-caption-table-info"> <div class="table-caption-table-info">
@ -182,13 +178,10 @@
</td> </td>
<td> <td>
<div class="btn-wrapper"> <div class="btn-wrapper">
<button *ngIf="!editing" pButton type="button" class="btn danger-icon-btn" icon="pi pi-trash" <button *ngIf="!editing" pButton type="button" class="btn danger-icon-btn" icon="pi pi-trash" (click)="deleteUserWarning(ri)"></button>
(click)="deleteUserWarning(ri)"></button>
<button *ngIf="editing" pButton type="button" pSaveEditableRow class="btn icon-btn" icon="pi pi-check" <button *ngIf="editing" pButton type="button" pSaveEditableRow class="btn icon-btn" icon="pi pi-check" (click)="editSaveUserWarning(value, ri)"></button>
(click)="editSaveUserWarning(value, ri)"></button> <button *ngIf="editing" pButton type="button" pCancelEditableRow class="btn danger-icon-btn" icon="pi pi-times"
<button *ngIf="editing" pButton type="button" pCancelEditableRow class="btn danger-icon-btn"
icon="pi pi-times"
(click)="editCancelUserWarning(ri)"></button> (click)="editCancelUserWarning(ri)"></button>
</div> </div>
</td> </td>
@ -222,22 +215,16 @@
</div> </div>
</p-panel> </p-panel>
<p-panel header="{{'view.server.profile.joined_voice_channel.header' | translate}}" [toggleable]="true" <p-panel header="{{'view.server.profile.joined_voice_channel.header' | translate}}" [toggleable]="true" [collapsed]="true"
[collapsed]="true"
(onBeforeToggle)="onBeforeToggle($event.event, $event.collapsed)"> (onBeforeToggle)="onBeforeToggle($event.event, $event.collapsed)">
<div *ngFor="let join of user.joinedVoiceChannels;"> <div *ngFor="let join of user.joinedVoiceChannels;">
<div class="content-row"> <div class="content-row">
<div class="content-column" style="flex: 0.3;"> <div class="content-column">
<div class="content-data-name">{{'common.id' | translate}}:</div>
<div class="content-data-value">{{join.id}}</div>
</div>
<div class="content-column" style="flex: 0.75;">
<div class="content-data-name">{{'view.server.profile.joined_voice_channel.time' | translate}}:</div> <div class="content-data-name">{{'view.server.profile.joined_voice_channel.time' | translate}}:</div>
<div class="content-data-value">{{join.time}} {{'general.hours' | translate}}</div> <div class="content-data-value">{{join.time}} {{'general.hours' | translate}}</div>
</div> </div>
<div class="content-column" style="flex: 2;"> <div class="content-column">
<div class="content-data-name">{{'view.server.profile.joined_voice_channel.channel' | translate}}:</div> <div class="content-data-name">{{'view.server.profile.joined_voice_channel.channel' | translate}}:</div>
<div class="content-data-value">{{join.channelName}}</div> <div class="content-data-value">{{join.channelName}}</div>
</div> </div>
@ -255,8 +242,7 @@
</div> </div>
</p-panel> </p-panel>
<p-panel header="{{'view.server.profile.joined_game_server.header' | translate}}" [toggleable]="true" <p-panel header="{{'view.server.profile.joined_game_server.header' | translate}}" [toggleable]="true" [collapsed]="true"
[collapsed]="true"
(onBeforeToggle)="onBeforeToggle($event.event, $event.collapsed)"> (onBeforeToggle)="onBeforeToggle($event.event, $event.collapsed)">
<div *ngFor="let join of user.userJoinedGameServers;"> <div *ngFor="let join of user.userJoinedGameServers;">
<div class="content-row"> <div class="content-row">

View File

@ -176,16 +176,15 @@ header {
flex-direction: row; flex-direction: row;
flex: 1; flex: 1;
margin: 5px 0; margin: 5px 0;
gap: 5px;
.content-column { .content-column {
display: flex; display: flex;
flex: 1; flex: 1;
gap: 5px;
} }
.content-data-name { .content-data-name {
display: flex; display: flex;
flex: 1;
align-items: center; align-items: center;
font-size: 18px; font-size: 18px;
@ -193,6 +192,7 @@ header {
.content-data-value { .content-data-value {
display: flex; display: flex;
flex: 1;
align-items: center; align-items: center;
font-size: 18px; font-size: 18px;