Skip to content

Commit 0e2a9d0

Browse files
committed
BUGFIX:
- /airbase commands did not work in public channels, if only one server was present - /airbase info ephemeral didn't work
1 parent a8e3512 commit 0e2a9d0

File tree

6 files changed

+46
-40
lines changed

6 files changed

+46
-40
lines changed

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -530,7 +530,7 @@ autorole: # Automatically give roles to pe
530530
online: Online # Give people that are online on any of your servers the "Online" role.
531531
no_dcs_autoban: false # If true, people banned on your Discord will not be banned on your servers (default: false)
532532
message_ban: User has been banned on Discord. # Default reason to show people that try to join your DCS servers when they are banned on Discord.
533-
message_autodelete: 300 # Most of the Discord messages are private messages. If not, this is the timeout after which they vanish. Default is 300 (5 mins).
533+
message_autodelete: 300 # Optional: Most of the Discord messages are private messages. If not, this is the timeout after which they vanish. Default is 300 (5 mins).
534534
channels:
535535
admin: 1122334455667788 # Optional: Central admin channel (see below).
536536
audit: 88776655443322 # Central audit channel to send audit events to (default: none)

migrate.py

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -407,9 +407,10 @@ def migrate_3(node: str):
407407
'owner': int(cfg['BOT']['OWNER']),
408408
'automatch': cfg['BOT'].getboolean('AUTOMATCH'),
409409
'autoban': cfg['BOT'].getboolean('AUTOBAN'),
410-
'message_ban': cfg['BOT']['MESSAGE_BAN'],
411-
'message_autodelete': int(cfg['BOT']['MESSAGE_AUTODELETE'])
410+
'message_ban': cfg['BOT']['MESSAGE_BAN']
412411
}
412+
if int(cfg['BOT']['MESSAGE_AUTODELETE']) > 0:
413+
bot['message_autodelete'] = int(cfg['BOT']['MESSAGE_AUTODELETE'])
413414
# take the first admin channel as the single one
414415
if single_admin:
415416
for server_name, instance in utils.findDCSInstances():

plugins/admin/commands.py

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -918,7 +918,8 @@ async def _startup(server: Server):
918918
await server.startup()
919919
server.maintenance = False
920920
except (TimeoutError, asyncio.TimeoutError):
921-
await interaction.followup.send(_("Timeout while starting server {}!").format(server.name))
921+
await interaction.followup.send(_("Timeout while starting server {}!").format(server.name),
922+
ephemeral=True)
922923

923924
async def _node_online(node_name: str):
924925
next_startup = 0
@@ -929,7 +930,7 @@ async def _node_online(node_name: str):
929930
next_startup += startup_delay
930931
else:
931932
server.maintenance = False
932-
await interaction.followup.send(_("Node {} is now online.").format(node_name))
933+
await interaction.followup.send(_("Node {} is now online.").format(node_name), ephemeral=ephemeral)
933934
await self.bot.audit(f"took node {node_name} online.", user=interaction.user)
934935

935936
ephemeral = utils.get_ephemeral(interaction)

plugins/mission/commands.py

Lines changed: 27 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -1065,23 +1065,24 @@ async def persistence(self, interaction: discord.Interaction,
10651065
@airbase.command(name="info", description=_('Information about a specific airbase'))
10661066
@utils.app_has_role('DCS')
10671067
@app_commands.guild_only()
1068+
@app_commands.rename(_server='server')
10681069
@app_commands.rename(idx=_('airbase'))
10691070
@app_commands.describe(idx=_('Airbase for warehouse information'))
10701071
@app_commands.autocomplete(idx=utils.airbase_autocomplete)
10711072
async def airbase_info(self, interaction: discord.Interaction,
1072-
server: app_commands.Transform[Server, utils.ServerTransformer(
1073+
_server: app_commands.Transform[Server, utils.ServerTransformer(
10731074
status=[Status.RUNNING, Status.PAUSED])],
10741075
idx: int):
1075-
if server.status not in [Status.RUNNING, Status.PAUSED]:
1076+
if _server.status not in [Status.RUNNING, Status.PAUSED]:
10761077
# noinspection PyUnresolvedReferences
10771078
await interaction.response.send_message(_("Server {} is not running.").format(server.display_name),
10781079
ephemeral=True)
10791080
return
10801081

10811082
# noinspection PyUnresolvedReferences
1082-
await interaction.response.defer()
1083-
airbase = server.current_mission.airbases[idx]
1084-
data = await server.send_to_dcs_sync({
1083+
await interaction.response.defer(ephemeral=utils.get_ephemeral(interaction))
1084+
airbase = _server.current_mission.airbases[idx]
1085+
data = await _server.send_to_dcs_sync({
10851086
"command": "getAirbase",
10861087
"name": airbase['name']
10871088
})
@@ -1093,10 +1094,10 @@ async def airbase_info(self, interaction: discord.Interaction,
10931094
report = Report(self.bot, self.plugin_name, 'airbase.json')
10941095
env = await report.render(coalition=colors[data['coalition']], airbase=airbase, data=data)
10951096
if utils.check_roles(set(self.bot.roles['DCS Admin'] + self.bot.roles['GameMaster']), interaction.user):
1096-
view = AirbaseView(server, airbase, data)
1097+
view = AirbaseView(_server, airbase, data)
10971098
else:
10981099
view = discord.utils.MISSING
1099-
msg = await interaction.followup.send(embed=env.embed, view=view, ephemeral=utils.get_ephemeral(interaction))
1100+
msg = await interaction.followup.send(embed=env.embed, view=view)
11001101
try:
11011102
await view.wait()
11021103
finally:
@@ -1108,29 +1109,30 @@ async def airbase_info(self, interaction: discord.Interaction,
11081109
@airbase.command(description=_('Automatic Terminal Information Service (ATIS)'))
11091110
@utils.app_has_role('DCS')
11101111
@app_commands.guild_only()
1112+
@app_commands.rename(_server='server')
11111113
@app_commands.rename(idx=_('airbase'))
11121114
@app_commands.describe(idx=_('Airbase for ATIS information'))
11131115
@app_commands.autocomplete(idx=utils.airbase_autocomplete)
11141116
async def atis(self, interaction: discord.Interaction,
1115-
server: app_commands.Transform[Server, utils.ServerTransformer(
1117+
_server: app_commands.Transform[Server, utils.ServerTransformer(
11161118
status=[Status.RUNNING, Status.PAUSED])],
11171119
idx: int):
1118-
if server.status not in [Status.RUNNING, Status.PAUSED]:
1120+
if _server.status not in [Status.RUNNING, Status.PAUSED]:
11191121
# noinspection PyUnresolvedReferences
11201122
await interaction.response.send_message(_("Server {} is not running.").format(server.display_name),
11211123
ephemeral=True)
11221124
return
11231125
# noinspection PyUnresolvedReferences
11241126
await interaction.response.defer()
1125-
airbase = server.current_mission.airbases[idx]
1126-
data = await server.send_to_dcs_sync({
1127+
airbase = _server.current_mission.airbases[idx]
1128+
data = await _server.send_to_dcs_sync({
11271129
"command": "getWeatherInfo",
11281130
"x": airbase['position']['x'],
11291131
"y": airbase['position']['y'],
11301132
"z": airbase['position']['z']
11311133
})
11321134
report = Report(self.bot, self.plugin_name, 'atis.json')
1133-
env = await report.render(airbase=airbase, data=data, server=server)
1135+
env = await report.render(airbase=airbase, data=data, server=_server)
11341136
msg = await interaction.original_response()
11351137
await msg.edit(embed=env.embed, delete_after=self.bot.locals.get('message_autodelete'))
11361138

@@ -1151,7 +1153,7 @@ async def capture(self, interaction: discord.Interaction,
11511153
return
11521154

11531155
# noinspection PyUnresolvedReferences
1154-
await interaction.response.defer()
1156+
await interaction.response.defer(ephemeral=utils.get_ephemeral(interaction))
11551157
airbase = server.current_mission.airbases[idx]
11561158
await server.send_to_dcs_sync({
11571159
"command": "captureAirbase",
@@ -1160,7 +1162,7 @@ async def capture(self, interaction: discord.Interaction,
11601162
})
11611163
await interaction.followup.send(
11621164
_("Airbase \"{}\": Coalition changed to **{}**.\n:warning: Auto-capturing is now **disabled**!").format(
1163-
airbase['name'], coalition.lower()), ephemeral=utils.get_ephemeral(interaction))
1165+
airbase['name'], coalition.lower()))
11641166

11651167
@staticmethod
11661168
async def manage_items(server: Server, airbase: dict, category: str, item: str | list[int],
@@ -1214,16 +1216,17 @@ async def manage_warehouse(server: Server, airbase: dict, value: int | None = No
12141216
@airbase.command(description=_('Manage warehouses'))
12151217
@utils.app_has_role('DCS')
12161218
@app_commands.guild_only()
1219+
@app_commands.rename(_server='server')
12171220
@app_commands.rename(idx=_('airbase'))
12181221
@app_commands.describe(idx=_('Airbase for warehouse information'))
12191222
@app_commands.autocomplete(idx=utils.airbase_autocomplete)
12201223
@app_commands.autocomplete(category=wh_category_autocomplete)
12211224
@app_commands.autocomplete(item=wh_item_autocomplete)
12221225
async def warehouse(self, interaction: discord.Interaction,
1223-
server: app_commands.Transform[Server, utils.ServerTransformer(
1226+
_server: app_commands.Transform[Server, utils.ServerTransformer(
12241227
status=[Status.RUNNING, Status.PAUSED])],
12251228
idx: int, category: str | None = None, item: str | None = None, value: int | None = None):
1226-
if server.status not in [Status.RUNNING, Status.PAUSED]:
1229+
if _server.status not in [Status.RUNNING, Status.PAUSED]:
12271230
# noinspection PyUnresolvedReferences
12281231
await interaction.response.send_message(_("Server {} is not running.").format(server.display_name),
12291232
ephemeral=True)
@@ -1234,15 +1237,15 @@ async def warehouse(self, interaction: discord.Interaction,
12341237
raise PermissionError(_("You cannot change warehouse items."))
12351238

12361239
# noinspection PyUnresolvedReferences
1237-
await interaction.response.defer()
1238-
airbase = server.current_mission.airbases[idx]
1240+
await interaction.response.defer(ephemeral=True)
1241+
airbase = _server.current_mission.airbases[idx]
12391242

12401243
embed = discord.Embed(title=_("Warehouse information for {}").format(airbase['name']),
12411244
color=discord.Color.blue())
12421245

12431246
if category and item:
12441247
_item = list(map(int, item.split('.'))) if isinstance(item, str) else item
1245-
data = await Mission.manage_items(server, airbase, category, _item, value)
1248+
data = await Mission.manage_items(_server, airbase, category, _item, value)
12461249
if data['value'] == 1000000:
12471250
display = _("unlimited")
12481251
elif category == 'liquids':
@@ -1251,11 +1254,11 @@ async def warehouse(self, interaction: discord.Interaction,
12511254
display = _("{} pcs").format(data['value'])
12521255

12531256
item_name = next(
1254-
(x['name'] for x in server.resources.get(category) if str(x['wstype']) == item),
1257+
(x['name'] for x in _server.resources.get(category) if str(x['wstype']) == item),
12551258
'n/a'
12561259
)
12571260
embed.add_field(name=_("Inventory for {}").format(item_name), value="```" + display + "```")
1258-
await interaction.followup.send(embed=embed, ephemeral=utils.get_ephemeral(interaction))
1261+
await interaction.followup.send(embed=embed)
12591262

12601263
else:
12611264
if value is not None:
@@ -1266,11 +1269,11 @@ async def warehouse(self, interaction: discord.Interaction,
12661269
return
12671270

12681271
if category is not None:
1269-
await Mission.manage_category(server, airbase, category, value)
1272+
await Mission.manage_category(_server, airbase, category, value)
12701273
else:
1271-
await Mission.manage_warehouse(server, airbase, value)
1274+
await Mission.manage_warehouse(_server, airbase, value)
12721275

1273-
data = await server.send_to_dcs_sync({
1276+
data = await _server.send_to_dcs_sync({
12741277
"command": "getAirbase",
12751278
"name": airbase['name']
12761279
})

plugins/voting/commands.py

Lines changed: 11 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -45,11 +45,12 @@ async def _list(self, interaction: discord.Interaction):
4545

4646
@vote.command(description=_('Create a vote'))
4747
@app_commands.guild_only()
48+
@app_commands.rename(_server='server')
4849
@utils.app_has_role('DCS')
4950
async def create(self, interaction: discord.Interaction,
50-
server: app_commands.Transform[Server, utils.ServerTransformer(status=[Status.RUNNING])],
51+
_server: app_commands.Transform[Server, utils.ServerTransformer(status=[Status.RUNNING])],
5152
what: Literal['Restart', 'Mission Change', 'Weather Change']):
52-
config = self.get_config(server)
53+
config = self.get_config(_server)
5354
# Users with either the "creator" role or "DCS Admin" can use this command
5455
roles = set(config.get('creator', []) + self.bot.roles['DCS Admin'])
5556
if not utils.check_roles(roles, interaction.user):
@@ -71,28 +72,28 @@ async def create(self, interaction: discord.Interaction,
7172
return
7273
_creditssystem = cast(CreditSystem, self.bot.cogs['CreditSystem'])
7374
data = await _creditssystem.get_credits(ucid)
74-
campaign_id, campaign_name = utils.get_running_campaign(self.node, server)
75+
campaign_id, campaign_name = utils.get_running_campaign(self.node, _server)
7576
credits = next((x['credits'] for x in data if x['id'] == campaign_id), 0)
7677
if credits < points:
7778
# noinspection PyUnresolvedReferences
7879
await interaction.response.send_message(
7980
_("You don't have enough credits to create a vote!"), ephemeral=True)
8081
return
8182

82-
if self.eventlistener._all_votes.get(server.name):
83+
if self.eventlistener._all_votes.get(_server.name):
8384
# noinspection PyUnresolvedReferences
8485
await interaction.response.send_message(_('There is already a voting running on this server.'),
8586
ephemeral=True)
8687
return
8788

8889
if what == 'Mission Change' and config['options'].get('mission') is not None:
89-
message = _("Vote for a mission change on server {}").format(server.name)
90+
message = _("Vote for a mission change on server {}").format(_server.name)
9091
element = 'mission'
9192
elif what == 'Restart' and config['options'].get('restart') is not None:
92-
message = _("Vote for a restart of server {}").format(server.name)
93+
message = _("Vote for a restart of server {}").format(_server.name)
9394
element = 'restart'
9495
elif what == 'Weather Change' and config['options'].get('preset') is not None:
95-
message = _("Vote for a weather change on server {}").format(server.name)
96+
message = _("Vote for a weather change on server {}").format(_server.name)
9697
element = 'preset'
9798
else:
9899
# noinspection PyUnresolvedReferences
@@ -108,7 +109,7 @@ async def create(self, interaction: discord.Interaction,
108109

109110
class_name = f"plugins.voting.options.{element}.{element.title()}"
110111
item: VotableItem = utils.str_to_class(class_name)(
111-
server, config['options'].get(element)
112+
_server, config['options'].get(element)
112113
)
113114
choices = await item.get_choices()
114115
if len(choices) > 2:
@@ -130,8 +131,8 @@ async def create(self, interaction: discord.Interaction,
130131
if not item.can_vote():
131132
await interaction.followup.send(_('This option is not available at the moment.'), ephemeral=True)
132133

133-
handler = VotingHandler(listener=self.eventlistener, item=item, server=server, config=config)
134-
self.eventlistener._all_votes[server.name] = handler
134+
handler = VotingHandler(listener=self.eventlistener, item=item, server=_server, config=config)
135+
self.eventlistener._all_votes[_server.name] = handler
135136
handler.votes[vote] = 1
136137

137138
await interaction.followup.send(_('{} created. It is open for {}').format(

services/bot/schemas/bot_schema.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ mapping:
1515
online: {type: text, nullable: false}
1616
no_dcs_autoban: {type: bool, nullable: false}
1717
message_ban: {type: str, nullable: false, range: {min: 1}}
18-
message_autodelete: {type: int, range: {min: 0}, nullable: false}
18+
message_autodelete: {type: int, range: {min: 1}, nullable: false}
1919
channels:
2020
type: map
2121
nullable: false

0 commit comments

Comments
 (0)