Support mentions for offline members

This commit is contained in:
Jeremy Zhang 2018-03-19 19:04:51 +00:00
parent 5dc1c01db4
commit 105fe24a40
2 changed files with 60 additions and 6 deletions

View File

@ -176,6 +176,20 @@ def get_channel_webhook_url(guild_id, channel_id):
webhook = discord_api.create_webhook(channel_id, name)
return webhook["content"]
def get_all_users(guild_id):
users = db.session.query(GuildMembers).filter(GuildMembers.guild_id == guild_id, GuildMembers.active == True).all()
mem = []
for u in users:
mem.append({
"id": str(u.user_id),
"avatar": u.avatar,
"avatar_url": generate_avatar_url(u.user_id, u.avatar, u.discriminator, True),
"username": u.username,
"nickname": u.nickname,
"discriminator": u.discriminator
})
return mem
@api.route("/fetch", methods=["GET"])
@valid_session_required(api=True)
@abort_if_guild_disabled()
@ -393,10 +407,11 @@ def process_query_guild(guild_id, visitor=False):
emojis = get_guild_emojis(guild_id)
roles = get_guild_roles(guild_id)
guest_icon = get_guild_guest_icon(guild_id)
all_users = get_all_users(guild_id)
if visitor:
for channel in channels:
channel["write"] = False
return jsonify(channels=channels, discordmembers=discordmembers, embedmembers=embedmembers, emojis=emojis, roles=roles, guest_icon=guest_icon, instant_invite=widget.get("instant_invite", None))
return jsonify(channels=channels, discordmembers=discordmembers, embedmembers=embedmembers, allusers=all_users, emojis=emojis, roles=roles, guest_icon=guest_icon, instant_invite=widget.get("instant_invite", None))
@api.route("/query_guild", methods=["GET"])
@valid_session_required(api=True)

View File

@ -47,6 +47,7 @@
var notification_sound_setting; // nothing, mentions, newmsgs - to control what new sound it makes
var display_richembeds; // true/false - if rich embeds should be displayed
var guild_roles_list = []; // List of all guild roles
var all_users = []; // List of all the users in guild
function element_in_view(element, fullyInView) {
var pageTop = $(window).scrollTop();
@ -496,6 +497,7 @@
}
function prepare_guild(guildobj) {
all_users = guildobj.allusers;
global_guest_icon = guildobj.guest_icon;
emoji_store = guildobj.emojis;
update_emoji_picker();
@ -1471,12 +1473,12 @@
var template = $('#mustache_usermentionchoices').html();
Mustache.parse(template);
var users = [];
for (var i = 0; i < discord_users_list.length; i++) {
var usr = discord_users_list[i];
if (usr.username.toLowerCase().indexOf(lastWord.toLowerCase()) > -1 || (usr.nick && usr.nick.toLowerCase().indexOf(lastWord.toLowerCase()) > -1)) {
for (var i = 0; i < all_users.length; i++) {
var usr = all_users[i];
if (usr.username.toLowerCase().indexOf(lastWord.toLowerCase()) > -1 || (usr.nickname && usr.nickname.toLowerCase().indexOf(lastWord.toLowerCase()) > -1)) {
var displayname = usr.username;
if (usr.nick) {
displayname = usr.nick;
displayname = usr.nickname;
}
users.push({
id: usr.id,
@ -1715,6 +1717,14 @@
discord_users_list.push(usr);
fill_discord_members(discord_users_list);
}
all_users.push({
"id": usr.id,
"avatar": usr.avatar,
"avatar_url": generate_avatar_url(usr.user_id, usr.avatar),
"username": usr.username,
"nickname": usr.nickname,
"discriminator": usr.discriminator
});
});
socket.on("GUILD_MEMBER_UPDATE", function (usr) {
@ -1722,6 +1732,19 @@
update_socket_channels();
socket.emit("current_user_info", {"guild_id": guild_id});
}
var updatedUser = false;
for (var i = 0; i < all_users.length; i++) {
if (usr.id == all_users[i].id) {
var u = all_users[i];
u.avatar = usr.avatar;
u.avatar_url = generate_avatar_url(usr.user_id, usr.avatar);
u.username = usr.username;
u.nickname = usr.nickname;
u.discriminator = usr.discriminator;
updatedUser = true;
break;
}
}
for (var i = 0; i < discord_users_list.length; i++) {
if (usr.id == discord_users_list[i].id) {
discord_users_list.splice(i, 1);
@ -1734,14 +1757,30 @@
}
discord_users_list.push(usr);
fill_discord_members(discord_users_list);
if (!updatedUser) {
all_users.push({
"id": usr.id,
"avatar": usr.avatar,
"avatar_url": generate_avatar_url(usr.user_id, usr.avatar),
"username": usr.username,
"nickname": usr.nickname,
"discriminator": usr.discriminator
});
}
});
socket.on("GUILD_MEMBER_REMOVE", function (usr) {
for (var i = 0; i < all_users.length; i++) {
if (usr.id == all_users[i].id) {
all_users.splice(i, 1);
break;
}
}
for (var i = 0; i < discord_users_list.length; i++) {
if (usr.id == discord_users_list[i].id) {
discord_users_list.splice(i, 1);
fill_discord_members(discord_users_list);
return;
break;
}
}
});