Add avatars for systems
This commit is contained in:
		| @@ -62,11 +62,12 @@ async def system_set(conn, message, args): | ||||
|     if system is None: | ||||
|         return False, "No system is registered to this account." | ||||
|  | ||||
|     allowed_properties = ["name", "description", "tag"] | ||||
|     allowed_properties = ["name", "description", "tag", "avatar"] | ||||
|     db_properties = { | ||||
|         "name": "name", | ||||
|         "description": "description", | ||||
|         "tag": "tag" | ||||
|         "tag": "tag", | ||||
|         "avatar": "avatar_url" | ||||
|     } | ||||
|  | ||||
|     prop = args[0] | ||||
| @@ -86,6 +87,20 @@ async def system_set(conn, message, args): | ||||
|                                         for member in members_exceeding]) | ||||
|                 logger.debug("Members exceeding combined length with tag '{}': {}".format(value, member_names)) | ||||
|                 return False, "The maximum length of a name plus the system tag is 32 characters. The following members would exceed the limit: {}. Please reduce the length of the tag, or rename the members.".format(member_names) | ||||
|  | ||||
|         if prop == "avatar": | ||||
|             user = await parse_mention(value) | ||||
|             if user: | ||||
|                 # Set the avatar to the mentioned user's avatar | ||||
|                 # Discord doesn't like webp, but also hosts png alternatives | ||||
|                 value = user.avatar_url.replace(".webp", ".png") | ||||
|             else: | ||||
|                 # Validate URL | ||||
|                 u = urlparse(value) | ||||
|                 if u.scheme in ["http", "https"] and u.netloc and u.path: | ||||
|                     value = value | ||||
|                 else: | ||||
|                     return False, "Invalid URL." | ||||
|     else: | ||||
|         # Clear from DB | ||||
|         value = None | ||||
| @@ -93,7 +108,11 @@ async def system_set(conn, message, args): | ||||
|     db_prop = db_properties[prop] | ||||
|     await db.update_system_field(conn, system_id=system["id"], field=db_prop, value=value) | ||||
|      | ||||
|     return True, "{} system {}.".format("Updated" if value else "Cleared", prop) | ||||
|     if prop == "avatar" and value: | ||||
|         response = make_default_embed("Updated system avatar.").set_image(url=value) | ||||
|     else: | ||||
|         response = "{} system {}.".format("Updated" if value else "Cleared", prop) | ||||
|     return True, response | ||||
|  | ||||
| @command(cmd="system link", usage="<account>", description="Links another account to your system.", category="System commands") | ||||
| async def system_link(conn, message, args): | ||||
| @@ -326,7 +345,7 @@ async def member_set(conn, message, member, args): | ||||
|     db_prop = db_properties[prop] | ||||
|     await db.update_member_field(conn, member_id=member["id"], field=db_prop, value=value) | ||||
|      | ||||
|     if prop == "avatar": | ||||
|     if prop == "avatar" and value: | ||||
|         response = make_default_embed("Updated {}'s avatar.".format(member["name"])).set_image(url=value) | ||||
|     else: | ||||
|         response = "{} {}'s {}.".format("Updated" if value else "Cleared", member["name"], prop) | ||||
|   | ||||
| @@ -231,6 +231,7 @@ async def create_tables(conn): | ||||
|         name        text, | ||||
|         description text, | ||||
|         tag         text, | ||||
|         avatar_url  text, | ||||
|         created     timestamp not null default current_timestamp | ||||
|     )""") | ||||
|     await conn.execute("""create table if not exists members ( | ||||
|   | ||||
| @@ -28,7 +28,10 @@ For example: | ||||
| For example: | ||||
| `pk;system set name My System` - sets your system name to "My System". | ||||
| `pk;system set description A really cool system.` - sets your system description. | ||||
| `pk;system set tag [MS]` - Sets the tag (which will be displayed after member names in messages) to "[MS]"."""), | ||||
| `pk;system set tag [MS]` - Sets the tag (which will be displayed after member names in messages) to "[MS]". | ||||
| `pk;system set avatar https://placekitten.com/400/400` - Changes your system's avatar to a linked image. | ||||
|  | ||||
| If you don't specify any value, the property will be cleared."""), | ||||
|         ("Linking accounts", | ||||
|         """If your system has multiple accounts, you can link all of them to your system, and you can use the bot from all of those accounts. | ||||
|          | ||||
| @@ -64,7 +67,9 @@ For example: | ||||
| `pk;member set John birthdate 1996-02-27` - Changes John's birthdate to Feb 27, 1996. (Must be YYYY-MM-DD format). | ||||
| `pk;member set John birthdate 02-27` - Changes John's birthdate to February 27th, with no year. | ||||
| `pk;member set John avatar https://placekitten.com/400/400` - Changes John's avatar to a linked image. | ||||
| `pk;member set John avatar @JohnsAccount` - Changes John's avatar to the avatar of the mentioned account."""), | ||||
| `pk;member set John avatar @JohnsAccount` - Changes John's avatar to the avatar of the mentioned account. | ||||
|  | ||||
| If you don't specify any value, the property will be cleared."""), | ||||
|         ("Removing a member", | ||||
|         """If you want to delete a member, you can use the `pk;member delete` command. | ||||
|          | ||||
|   | ||||
| @@ -204,6 +204,9 @@ async def generate_system_info_card(conn, system: asyncpg.Record) -> discord.Emb | ||||
|     if system["name"]: | ||||
|         card.title = system["name"] | ||||
|  | ||||
|     if system["avatar_url"]: | ||||
|         card.set_thumbnail(url=system["avatar_url"]) | ||||
|  | ||||
|     if system["tag"]: | ||||
|         card.add_field(name="Tag", value=system["tag"]) | ||||
|      | ||||
|   | ||||
		Reference in New Issue
	
	Block a user