mirror of
				https://github.com/TitanEmbeds/Titan.git
				synced 2025-11-04 15:57:02 +01:00 
			
		
		
		
	Initial support for channel categories
This commit is contained in:
		@@ -149,7 +149,7 @@ class SocketIOInterface:
 | 
				
			|||||||
        await self.io.emit('CHANNEL_CREATE', data=chan, room=str("GUILD_"+channel.server.id), namespace='/gateway')
 | 
					        await self.io.emit('CHANNEL_CREATE', data=chan, room=str("GUILD_"+channel.server.id), namespace='/gateway')
 | 
				
			||||||
    
 | 
					    
 | 
				
			||||||
    async def on_channel_update(self, channel):
 | 
					    async def on_channel_update(self, channel):
 | 
				
			||||||
        if str(channel.type) != "text":
 | 
					        if str(channel.type) not in ["text", "category"]:
 | 
				
			||||||
            return
 | 
					            return
 | 
				
			||||||
        chan = self.get_formatted_channel(channel)
 | 
					        chan = self.get_formatted_channel(channel)
 | 
				
			||||||
        await self.io.emit('CHANNEL_UPDATE', data=chan, room=str("GUILD_"+channel.server.id), namespace='/gateway')
 | 
					        await self.io.emit('CHANNEL_UPDATE', data=chan, room=str("GUILD_"+channel.server.id), namespace='/gateway')
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -64,7 +64,7 @@ def get_roles_list(guildroles):
 | 
				
			|||||||
def get_channels_list(guildchannels):
 | 
					def get_channels_list(guildchannels):
 | 
				
			||||||
    channels = []
 | 
					    channels = []
 | 
				
			||||||
    for channel in guildchannels:
 | 
					    for channel in guildchannels:
 | 
				
			||||||
        if str(channel.type) == "text":
 | 
					        if str(channel.type) in ["text", "category"]:
 | 
				
			||||||
            overwrites = []
 | 
					            overwrites = []
 | 
				
			||||||
            for target, overwrite in channel.overwrites:
 | 
					            for target, overwrite in channel.overwrites:
 | 
				
			||||||
                if isinstance(target, discord.Role):
 | 
					                if isinstance(target, discord.Role):
 | 
				
			||||||
@@ -80,14 +80,17 @@ def get_channels_list(guildchannels):
 | 
				
			|||||||
                    "allow": allow,
 | 
					                    "allow": allow,
 | 
				
			||||||
                    "deny": deny,
 | 
					                    "deny": deny,
 | 
				
			||||||
                })
 | 
					                })
 | 
				
			||||||
 | 
					            parent = channel.parent
 | 
				
			||||||
 | 
					            if parent:
 | 
				
			||||||
 | 
					                parent = parent.id
 | 
				
			||||||
            channels.append({
 | 
					            channels.append({
 | 
				
			||||||
                "id": channel.id,
 | 
					                "id": channel.id,
 | 
				
			||||||
                "name": channel.name,
 | 
					                "name": channel.name,
 | 
				
			||||||
                "topic": channel.topic,
 | 
					                "topic": channel.topic,
 | 
				
			||||||
                "position": channel.position,
 | 
					                "position": channel.position,
 | 
				
			||||||
                "type": str(channel.type),
 | 
					                "type": str(channel.type),
 | 
				
			||||||
                "permission_overwrites": overwrites
 | 
					                "permission_overwrites": overwrites,
 | 
				
			||||||
 | 
					                "parent_id": parent,
 | 
				
			||||||
            })
 | 
					            })
 | 
				
			||||||
    return channels
 | 
					    return channels
 | 
				
			||||||
    
 | 
					    
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -179,7 +179,7 @@ def fetch():
 | 
				
			|||||||
        chan = filter_guild_channel(guild_id, channel_id)
 | 
					        chan = filter_guild_channel(guild_id, channel_id)
 | 
				
			||||||
        if not chan:
 | 
					        if not chan:
 | 
				
			||||||
            abort(404)
 | 
					            abort(404)
 | 
				
			||||||
        if not chan.get("read"):
 | 
					        if not chan.get("read") or chan["channel"]["type"] != "text":
 | 
				
			||||||
            status_code = 401
 | 
					            status_code = 401
 | 
				
			||||||
        else:
 | 
					        else:
 | 
				
			||||||
            messages = get_channel_messages(guild_id, channel_id, after_snowflake)
 | 
					            messages = get_channel_messages(guild_id, channel_id, after_snowflake)
 | 
				
			||||||
@@ -200,7 +200,7 @@ def fetch_visitor():
 | 
				
			|||||||
    chan = filter_guild_channel(guild_id, channel_id, True)
 | 
					    chan = filter_guild_channel(guild_id, channel_id, True)
 | 
				
			||||||
    if not chan:
 | 
					    if not chan:
 | 
				
			||||||
        abort(404)
 | 
					        abort(404)
 | 
				
			||||||
    if not chan.get("read"):
 | 
					    if not chan.get("read") or chan["channel"]["type"] != "text":
 | 
				
			||||||
        status_code = 401
 | 
					        status_code = 401
 | 
				
			||||||
    else:
 | 
					    else:
 | 
				
			||||||
        messages = get_channel_messages(guild_id, channel_id, after_snowflake)
 | 
					        messages = get_channel_messages(guild_id, channel_id, after_snowflake)
 | 
				
			||||||
@@ -233,7 +233,7 @@ def post():
 | 
				
			|||||||
        status_code = 401
 | 
					        status_code = 401
 | 
				
			||||||
    else:
 | 
					    else:
 | 
				
			||||||
        chan = filter_guild_channel(guild_id, channel_id)
 | 
					        chan = filter_guild_channel(guild_id, channel_id)
 | 
				
			||||||
        if not chan.get("write"):
 | 
					        if not chan.get("write") or chan["channel"]["type"] != "text":
 | 
				
			||||||
            status_code = 401
 | 
					            status_code = 401
 | 
				
			||||||
        elif not illegal_post:
 | 
					        elif not illegal_post:
 | 
				
			||||||
            userid = session["user_id"]
 | 
					            userid = session["user_id"]
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -82,6 +82,10 @@ nav .brand-logo {
 | 
				
			|||||||
  color: #eceff1;
 | 
					  color: #eceff1;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					.side-nav li>a[id^=channel] {
 | 
				
			||||||
 | 
					  margin-left: 7px;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
.side-nav .subheader {
 | 
					.side-nav .subheader {
 | 
				
			||||||
  color: #cfd8dc;
 | 
					  color: #cfd8dc;
 | 
				
			||||||
  font-variant: small-caps;
 | 
					  font-variant: small-caps;
 | 
				
			||||||
@@ -213,6 +217,10 @@ nav .brand-logo {
 | 
				
			|||||||
  -webkit-filter: brightness(150%);
 | 
					  -webkit-filter: brightness(150%);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					.subheader .channel-category {
 | 
				
			||||||
 | 
					  text-transform: uppercase;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
.chatusername {
 | 
					.chatusername {
 | 
				
			||||||
  font-weight: bold;
 | 
					  font-weight: bold;
 | 
				
			||||||
  color: #eceff1;
 | 
					  color: #eceff1;
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -371,20 +371,74 @@
 | 
				
			|||||||
        guild_channels_list = channels;
 | 
					        guild_channels_list = channels;
 | 
				
			||||||
        var template = $('#mustache_channellistings').html();
 | 
					        var template = $('#mustache_channellistings').html();
 | 
				
			||||||
        Mustache.parse(template);
 | 
					        Mustache.parse(template);
 | 
				
			||||||
 | 
					        var template_category = $('#mustache_channelcategory').html();
 | 
				
			||||||
 | 
					        Mustache.parse(template_category);
 | 
				
			||||||
        $("#channels-list").empty();
 | 
					        $("#channels-list").empty();
 | 
				
			||||||
        var curr_default_channel = selected_channel;
 | 
					        var curr_default_channel = selected_channel;
 | 
				
			||||||
 | 
					        var categories = [{
 | 
				
			||||||
 | 
					            "channel": {id: null, name: "Uncategorized"},
 | 
				
			||||||
 | 
					            "children": [],
 | 
				
			||||||
 | 
					            "read": true,
 | 
				
			||||||
 | 
					        }];
 | 
				
			||||||
        for (var i = 0; i < channels.length; i++) {
 | 
					        for (var i = 0; i < channels.length; i++) {
 | 
				
			||||||
            var chan = channels[i];
 | 
					            var chan = channels[i];
 | 
				
			||||||
            guild_channels[chan.channel.id] = chan;
 | 
					            guild_channels[chan.channel.id] = chan;
 | 
				
			||||||
            if (chan.read) {
 | 
					            if (chan.channel.type == "category") {
 | 
				
			||||||
              var rendered = Mustache.render(template, {"channelid": chan.channel.id, "channelname": chan.channel.name});
 | 
					                chan.children = [];
 | 
				
			||||||
              $("#channels-list").append(rendered);
 | 
					                categories.push(chan);
 | 
				
			||||||
              $("#channel-" + chan.channel.id.toString()).click({"channel_id": chan.channel.id.toString()}, function(event) {
 | 
					            }
 | 
				
			||||||
                  select_channel(event.data.channel_id);
 | 
					        }
 | 
				
			||||||
              });
 | 
					        categories.sort(function(a, b) {
 | 
				
			||||||
              if (!selected_channel && (!curr_default_channel || chan.channel.position < curr_default_channel.channel.position)) {
 | 
					          return parseInt(a.channel.position) - parseInt(b.channel.position);
 | 
				
			||||||
                  curr_default_channel = chan;
 | 
					        });
 | 
				
			||||||
              }
 | 
					        for (var i = 0; i < channels.length; i++) {
 | 
				
			||||||
 | 
					            var chan = channels[i];
 | 
				
			||||||
 | 
					            if (chan.channel.type == "text") {
 | 
				
			||||||
 | 
					                var cate = chan.channel.parent_id;
 | 
				
			||||||
 | 
					                for (var j = 0; j < categories.length; j++) {
 | 
				
			||||||
 | 
					                    var thiscategory = categories[j];
 | 
				
			||||||
 | 
					                    if (thiscategory.channel.id == cate) {
 | 
				
			||||||
 | 
					                        thiscategory.children.push(chan);
 | 
				
			||||||
 | 
					                        break;
 | 
				
			||||||
 | 
					                    }
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        for (var i = 0; i < categories.length; i++) {
 | 
				
			||||||
 | 
					            var cate = categories[i];
 | 
				
			||||||
 | 
					            cate.read = false;
 | 
				
			||||||
 | 
					            for (var j = 0; j < cate.children.length; j++) {
 | 
				
			||||||
 | 
					                var chan = cate.children[j];
 | 
				
			||||||
 | 
					                if (chan.channel.type == "text" && chan.read) {
 | 
				
			||||||
 | 
					                    cate.read = true;
 | 
				
			||||||
 | 
					                    break;
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        for (var i = 0; i < categories.length; i++) {
 | 
				
			||||||
 | 
					            var cate = categories[i];
 | 
				
			||||||
 | 
					            var children = cate.children;
 | 
				
			||||||
 | 
					            children.sort(function(a, b) {
 | 
				
			||||||
 | 
					              return parseInt(a.channel.position) - parseInt(b.channel.position);
 | 
				
			||||||
 | 
					            });
 | 
				
			||||||
 | 
					            if (i != 0) {
 | 
				
			||||||
 | 
					                if (cate.read) {
 | 
				
			||||||
 | 
					                    var rendered_category = Mustache.render(template_category, {"name": cate.channel.name});
 | 
				
			||||||
 | 
					                    $("#channels-list").append(rendered_category);
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					            for (var j = 0; j < children.length; j++) {
 | 
				
			||||||
 | 
					                var chan = children[j];
 | 
				
			||||||
 | 
					                if (chan.read) {
 | 
				
			||||||
 | 
					                    var rendered_channel = Mustache.render(template, {"channelid": chan.channel.id, "channelname": chan.channel.name});
 | 
				
			||||||
 | 
					                    $("#channels-list").append(rendered_channel);
 | 
				
			||||||
 | 
					                    $("#channel-" + chan.channel.id.toString()).click({"channel_id": chan.channel.id.toString()}, function(event) {
 | 
				
			||||||
 | 
					                        select_channel(event.data.channel_id);
 | 
				
			||||||
 | 
					                    });
 | 
				
			||||||
 | 
					                    if (!selected_channel && (!curr_default_channel || chan.channel.position < curr_default_channel.channel.position)) {
 | 
				
			||||||
 | 
					                        curr_default_channel = chan;
 | 
				
			||||||
 | 
					                    }
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
        if (typeof curr_default_channel == "object") {
 | 
					        if (typeof curr_default_channel == "object") {
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -212,6 +212,10 @@
 | 
				
			|||||||
      <li><a class="subheader role-title">{{name}}</a></li>
 | 
					      <li><a class="subheader role-title">{{name}}</a></li>
 | 
				
			||||||
    </script>
 | 
					    </script>
 | 
				
			||||||
    
 | 
					    
 | 
				
			||||||
 | 
					    <script id="mustache_channelcategory" type="text/template">
 | 
				
			||||||
 | 
					      <li><a class="subheader channel-category">{{name}}</a></li>
 | 
				
			||||||
 | 
					    </script>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    <script id="mustache_message_emoji" type="text/template">
 | 
					    <script id="mustache_message_emoji" type="text/template">
 | 
				
			||||||
      <img class="message_emoji tooltipped" src='https://cdn.discordapp.com/emojis/{{id}}.png' data-position="top" data-delay="200" data-tooltip=":{{name}}:" alt=":{{name}}:" />
 | 
					      <img class="message_emoji tooltipped" src='https://cdn.discordapp.com/emojis/{{id}}.png' data-position="top" data-delay="200" data-tooltip=":{{name}}:" alt=":{{name}}:" />
 | 
				
			||||||
    </script>
 | 
					    </script>
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -117,7 +117,7 @@ def get_guild_channels(guild_id, force_everyone=False):
 | 
				
			|||||||
    guild_owner = str(dbguild.owner_id)
 | 
					    guild_owner = str(dbguild.owner_id)
 | 
				
			||||||
    result_channels = []
 | 
					    result_channels = []
 | 
				
			||||||
    for channel in guild_channels:
 | 
					    for channel in guild_channels:
 | 
				
			||||||
        if channel['type'] == "text":
 | 
					        if channel['type'] in ["text", "category"]:
 | 
				
			||||||
            result = get_channel_permission(channel, guild_id, guild_owner, guild_roles, member_roles, session.get("user_id"), force_everyone)
 | 
					            result = get_channel_permission(channel, guild_id, guild_owner, guild_roles, member_roles, session.get("user_id"), force_everyone)
 | 
				
			||||||
            bot_result = get_channel_permission(channel, guild_id, guild_owner, guild_roles, bot_member_roles, config["client-id"], False)
 | 
					            bot_result = get_channel_permission(channel, guild_id, guild_owner, guild_roles, bot_member_roles, config["client-id"], False)
 | 
				
			||||||
            if not bot_result["read"]:
 | 
					            if not bot_result["read"]:
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user