Exemplo n.º 1
0
 def test_no_library(self):
     for extension in ["7z", "zip"]:
         errors, warnings, _, curation_type, _, _ = validate_curation(
             f"test_curations/test_curation_none_library.{extension}")
         self.assertCountEqual(errors, [])
         self.assertCountEqual(warnings, [])
         self.assertEqual(curation_type, CurationType.FLASH_GAME)
Exemplo n.º 2
0
 def test_trailing_language_semicolon(self):
     for extension in ["7z", "zip"]:
         errors, warnings, _ = validate_curation(
             f"test_curations/test_curation_languages_semicolon.{extension}"
         )
         self.assertCountEqual(errors, [])
         self.assertCountEqual(warnings, [])
Exemplo n.º 3
0
 def test_desktop_ini(self):
     for extension in ["7z", "zip"]:
         errors, warnings, _, _, _, _ = validate_curation(
             f"test_curations/test_curation_desktop_ini.{extension}")
         self.assertCountEqual(
             errors, ["desktop.ini file found in curation, please remove."])
         self.assertCountEqual(warnings, [])
 def test_valid_yaml_meta_extreme(self):
     for extension in ["7z", "zip"]:
         errors, warnings, is_extreme = validate_curation(
             f"test_curations/test_curation_valid_extreme.{extension}")
         self.assertCountEqual(errors, [])
         self.assertCountEqual(warnings, [])
         self.assertTrue(is_extreme)
 def test_missing_tags(self):
     for extension in ["7z", "zip"]:
         errors, warnings, _ = validate_curation(
             f"test_curations/test_curation_missing_tags.{extension}")
         self.assertCountEqual(
             errors, ["Missing tags. At least one tag must be specified."])
         self.assertCountEqual(warnings, [])
 def test_valid_legacy_genre(self):
     for extension in ["7z", "zip"]:
         errors, warnings, is_extreme = validate_curation(
             f"test_curations/test_curation_valid_legacy_genre.{extension}")
         self.assertCountEqual(errors, [])
         self.assertCountEqual(warnings, [])
         self.assertFalse(is_extreme)
 def test_empty_content(self):
     for extension in ["7z", "zip"]:
         errors, warnings, _ = validate_curation(
             f"test_curations/test_curation_empty_content.{extension}")
         self.assertCountEqual(errors,
                               ["No files found in content folder."])
         self.assertCountEqual(warnings, [])
 def test_curation_too_large(self):
     for extension in ["7z", "zip"]:
         errors, warnings, _ = validate_curation(
             f"test_curations/test_curation_2GB.{extension}")
         self.assertCountEqual(errors, [])
         self.assertCountEqual(warnings, [
             "The archive is too large to be validated (`2000MB/1000MB`)."
         ])
Exemplo n.º 9
0
 def test_comma_in_languages(self):
     for extension in ["7z", "zip"]:
         errors, warnings, _ = validate_curation(
             f"test_curations/test_curation_comma_in_languages.{extension}")
         self.assertCountEqual(
             errors,
             ["Languages should be separated with semicolons, not commas."])
         self.assertCountEqual(warnings, [])
Exemplo n.º 10
0
 def test_curation_capital_extension_logo(self):
     for extension in ["7z", "zip"]:
         errors, warnings, is_extreme, _, _, _ = validate_curation(
             f"test_curations/test_curation_capital_extension_logo.{extension}"
         )
         self.assertCountEqual(errors,
                               ["Logo file extension must be lowercase."])
         self.assertCountEqual(warnings, [])
Exemplo n.º 11
0
 def test_invalid_yaml_meta_extreme(self):
     for extension in ["7z", "zip"]:
         errors, warnings, is_extreme, _, _, _ = validate_curation(
             f"test_curations/test_curation_invalid_extreme.{extension}")
         self.assertCountEqual(
             errors, ["Curation is extreme but lacks extreme tags."])
         self.assertCountEqual(warnings, [])
         self.assertTrue(is_extreme)
Exemplo n.º 12
0
 def test_valid_date(self):
     for extension in ["7z", "zip"]:
         errors, warnings, _, _, _, _ = validate_curation(
             f"test_curations/test_curation_invalid_date.{extension}")
         self.assertCountEqual(
             errors,
             ["Invalid release date. Ensure entered date is valid."])
         self.assertCountEqual(warnings, [])
Exemplo n.º 13
0
 def test_language_name(self):
     for extension in ["7z", "zip"]:
         errors, warnings, _, _, _, _ = validate_curation(
             f"test_curations/test_curation_language_name.{extension}")
         self.assertCountEqual(errors, [
             "Languages must be in ISO 639-1 format, so please use `ja` instead of `Japanese`"
         ])
         self.assertCountEqual(warnings, [])
 def test_curation_capital_extension_screenshot(self):
     for extension in ["7z", "zip"]:
         errors, warnings, is_extreme = validate_curation(
             f"test_curations/test_curation_capital_extension_screenshot.{extension}"
         )
         self.assertCountEqual(
             errors, ["Screenshot file extension must be lowercase."])
         self.assertCountEqual(warnings, [])
Exemplo n.º 15
0
 def test_curation_null_languages(self):
     for extension in ["7z", "zip"]:
         errors, warnings, _, _, _, _ = validate_curation(
             f"test_curations/test_curation_nul_languages.{extension}")
         self.assertCountEqual(
             errors,
             ["The `Languages` property in the meta file is mandatory."])
         self.assertCountEqual(warnings, [])
 def test_missing_status(self):
     for extension in ["7z", "zip"]:
         errors, warnings, _ = validate_curation(
             f"test_curations/test_curation_missing_status.{extension}")
         self.assertCountEqual(
             errors,
             ["The `Status` property in the meta file is mandatory."])
         self.assertCountEqual(warnings, [])
 def test_curation_invalid_archive(self):
     for extension in ["7z", "zip"]:
         errors, warnings, is_extreme = validate_curation(
             f"test_curations/test_curation_invalid_archive.{extension}")
         self.assertCountEqual(
             errors,
             [f"There seems to a problem with your {extension} file."])
         self.assertCountEqual(warnings, [])
 def test_missing_ss(self):
     for extension in ["7z", "zip"]:
         errors, warnings, _ = validate_curation(
             f"test_curations/test_curation_missing_ss.{extension}")
         self.assertCountEqual(errors, [
             "Screenshot file is either missing or its filename is incorrect."
         ])
         self.assertCountEqual(warnings, [])
 def test_missing_meta(self):
     for extension in ["7z", "zip"]:
         errors, warnings, _ = validate_curation(
             f"test_curations/test_curation_missing_meta.{extension}")
         self.assertCountEqual(errors, [
             "Meta file is either missing or its filename is incorrect. Are you using Flashpoint Core for curating?"
         ])
         self.assertCountEqual(warnings, [])
 def test_curation_duplicate_launch_command(self):
     for extension in ["7z", "zip"]:
         errors, warnings, is_extreme = validate_curation(
             f"test_curations/test_curation_duplicate_launch_command.{extension}"
         )
         self.assertCountEqual(errors, [
             "Identical launch command already present in the master database. Is your curation a duplicate?"
         ])
         self.assertCountEqual(warnings, [])
Exemplo n.º 21
0
 def test_common_bad_language(self):
     for extension in ["7z", "zip"]:
         errors, warnings, _, _, _, _ = validate_curation(
             f"test_curations/test_curation_common_bad_language.{extension}"
         )
         self.assertCountEqual(errors, [
             "The correct ISO 639-1 language code for Japanese is `ja`, not `jp`."
         ])
         self.assertCountEqual(warnings, [])
Exemplo n.º 22
0
 def test_localflash_no_folder(self):
     for extension in ["7z", "zip"]:
         errors, warnings, _, _, _, _ = validate_curation(
             f"test_curations/test_curation_localflash_no_folder.{extension}"
         )
         self.assertCountEqual(errors, [
             "Content must be in additional folder in localflash rather than in localflash directly."
         ])
         self.assertCountEqual(warnings, [])
 def test_missing_application_path_warning(self):
     for extension in ["7z", "zip"]:
         errors, warnings, _ = validate_curation(
             f"test_curations/test_curation_missing_application_path.{extension}"
         )
         self.assertCountEqual(errors, [
             "The `Application Path` property in the meta file is mandatory."
         ])
         self.assertCountEqual(warnings, [])
Exemplo n.º 24
0
 def test_localflash_bad_name(self):
     for extension in ["7z", "zip"]:
         errors, warnings, _, _, _, _ = validate_curation(
             f"test_curations/test_curation_localflash_bad_name.{extension}"
         )
         self.assertCountEqual(errors, [
             "Extremely common localflash containing folder name, please change."
         ])
         self.assertCountEqual(warnings, [])
 def test_unknown_tag_warning(self):
     for extension in ["7z", "zip"]:
         errors, warnings, _ = validate_curation(
             f"test_curations/test_curation_unknown_tag.{extension}")
         self.assertCountEqual(errors, [])
         self.assertCountEqual(warnings, [
             "Tag `Unknown Tag` is not a known tag, please verify (did you write it correctly?).",
             "Tag `Another Unknown Tag` is not a known tag, please verify (did you write it correctly?)."
         ])
 def test_missing_root_folder(self):
     for extension in ["7z", "zip"]:
         errors, warnings, _ = validate_curation(
             f"test_curations/test_curation_missing_root_folder.{extension}"
         )
         self.assertCountEqual(errors, [
             "Logo, screenshot, content folder and meta not found. Is your curation structured properly?"
         ])
         self.assertCountEqual(warnings, [])
Exemplo n.º 27
0
 def test_missing_launch_command(self):
     for extension in ["7z", "zip"]:
         errors, warnings, _, _, _, _ = validate_curation(
             f"test_curations/test_curation_missing_launch_command.{extension}"
         )
         self.assertCountEqual(errors, [
             "The `Launch Command` property in the meta file is mandatory."
         ])
         self.assertCountEqual(warnings, [])
 def test_curation_empty_meta(self):
     for extension in ["7z", "zip"]:
         errors, warnings, is_extreme = validate_curation(
             f"test_curations/test_curation_empty_meta.{extension}")
         self.assertCountEqual(errors, ["The meta file seems to be empty."])
         self.assertCountEqual(warnings, [])
Exemplo n.º 29
0
async def check_curation_in_message(message: discord.Message,
                                    dry_run: bool = True):
    if len(message.attachments
           ) != 1:  # TODO can we have more than one attachment?
        return

    is_flash_game = message.channel.id == FLASH_GAMES_CHANNEL
    is_other_game = message.channel.id == OTHER_GAMES_CHANNEL
    is_animation = message.channel.id == ANIMATIONS_CHANNEL
    is_audition = message.channel.id == AUDITIONS_CHANNEL
    # TODO disable
    # is_curator_lounge = message.channel.id == CURATOR_LOUNGE_CHANNEL

    if not (is_flash_game or is_other_game or is_animation
            or is_audition):  # or is_curator_lounge):
        return

    attachment = message.attachments[0]
    archive_filename: str = attachment.filename
    if not (archive_filename.endswith('.7z')
            or archive_filename.endswith('.zip')
            or archive_filename.endswith('.rar')):
        return

    l.debug(
        f"detected message '{message.id}' from user '{message.author}' in channel '{message.channel}' with attachment '{archive_filename}'"
    )
    l.debug(
        f"downloading attachment '{attachment.id}' - '{archive_filename}'...")
    await attachment.save(archive_filename)

    try:
        curation_errors, curation_warnings, is_extreme = validate_curation(
            archive_filename)
    except Exception as e:
        l.exception(e)
        l.debug(f"removing archive {archive_filename}...")
        os.remove(archive_filename)
        if not dry_run:
            l.debug(f"adding 💥 reaction to message '{message.id}'")
            await message.add_reaction('💥')
        reply_channel: discord.TextChannel = bot.get_channel(
            BOT_TESTING_CHANNEL)
        await reply_channel.send(
            f"<@{GOD_USER}> the curation validator has thrown an exception:\n"
            f"🔗 {message.jump_url}\n"
            f"```{traceback.format_exc()}```")
        return

    # archive cleanup
    l.debug(f"removing archive {archive_filename}...")
    os.remove(archive_filename)

    # format reply
    final_reply: str = ""
    if len(curation_errors) > 0:
        final_reply += message.author.mention + f" Your curation is invalid:\n" \
                                                f"🔗 {message.jump_url}\n"
    if len(curation_errors) == 0 and len(curation_warnings) > 0:
        final_reply += message.author.mention + f" Your curation might have some problems:\n" \
                                                f"🔗 {message.jump_url}\n"

    if len(curation_errors) > 0:
        if not dry_run:
            l.debug(f"adding 🚫 reaction to message '{message.id}'")
            await message.add_reaction('🚫')
        for curation_error in curation_errors:
            final_reply += f"🚫 {curation_error}\n"

    # TODO tag warnings changed to errors this way because i'm lazy for now
    if len(curation_warnings) > 0:
        if not dry_run:
            l.debug(f"adding 🚫 reaction to message '{message.id}'")
            await message.add_reaction('🚫')
        for curation_warning in curation_warnings:
            final_reply += f"🚫 {curation_warning}\n"

    if len(final_reply) > 0:
        # TODO tag warnings changed to errors this way because i'm lazy for now
        # if len(curation_errors) == 0 and len(curation_warnings) > 0:
        #     final_reply += "⚠️ If the problems detected are valid and you're going to upload a fixed version, " \
        #                    "please remove the original curation submission after you upload the new one."
        reply_channel: discord.TextChannel = bot.get_channel(
            BOT_ALERTS_CHANNEL)
        if is_extreme:
            reply_channel = bot.get_channel(NSFW_LOUNGE_CHANNEL)
        elif is_flash_game or is_other_game or is_animation:
            reply_channel = bot.get_channel(BOT_ALERTS_CHANNEL)
        elif is_audition:
            reply_channel = bot.get_channel(AUDITION_CHAT_CHANNEL)
        if not dry_run:
            l.info(f"sending reply to message '{message.id}' : '" +
                   final_reply.replace('\n', ' ') + "'")
            await reply_channel.send(final_reply)
        else:
            l.info(f"NOT SENDING reply to message '{message.id}' : '" +
                   final_reply.replace('\n', ' ') + "'")
    else:
        if not dry_run:
            l.debug(f"adding 🤖 reaction to message '{message.id}'")
            await message.add_reaction('🤖')
        l.info(
            f"curation in message '{message.id}' validated and is OK - {message.jump_url}"
        )
 def test_missing_content(self):
     for extension in ["7z", "zip"]:
         errors, warnings, _ = validate_curation(
             f"test_curations/test_curation_missing_content.{extension}")
         self.assertCountEqual(errors, ["Content folder not found."])
         self.assertCountEqual(warnings, [])