MLv2 v1.7.59

This commit is contained in:
1Lighty 2020-10-25 15:07:59 +01:00
parent dfca0324aa
commit 8a589e829d
2 changed files with 90 additions and 109 deletions

View File

@ -1,4 +1,9 @@
# [MessageLoggerV2](https://1lighty.github.io/BetterDiscordStuff/?plugin=MessageLoggerV2 "MessageLoggerV2") Changelog
### 1.7.59
- Fixed deleted messages sometimes zapping your pfp (and sometimes others)
- Fixed logger sometimes locking up Discord when opening a channel
- Fixed some deleted messages not always showing in chat (they do now, no matter what, even ones that didn't before)
### 1.7.58
- Fixed not working on canary

View File

@ -29,7 +29,7 @@ module.exports = class MessageLoggerV2 {
return 'MessageLoggerV2';
}
getVersion() {
return '1.7.58';
return '1.7.59';
}
getAuthor() {
return 'Lighty';
@ -60,7 +60,7 @@ module.exports = class MessageLoggerV2 {
const iXenoLib = BdApi.Plugins.get('XenoLib');
const iZeresPluginLibrary = BdApi.Plugins.get('ZeresPluginLibrary');
if (isOutOfDate(iXenoLib, '1.3.29')) XenoLibOutdated = true;
if (isOutOfDate(iZeresPluginLibrary, '1.2.23')) ZeresPluginLibraryOutdated = true;
if (isOutOfDate(iZeresPluginLibrary, '1.2.24')) ZeresPluginLibraryOutdated = true;
}
if (!global.XenoLib || !global.ZeresPluginLibrary || XenoLibOutdated || ZeresPluginLibraryOutdated) {
@ -164,7 +164,7 @@ module.exports = class MessageLoggerV2 {
{
title: 'fixed',
type: 'fixed',
items: ['Fixed not working on canary']
items: ['Fixed deleted messages sometimes zapping your pfp (and sometimes others)', 'Fixed logger sometimes locking up Discord when opening a channel', 'Fixed some deleted messages not always showing in chat (they do now, no matter what, even ones that didn\'t before)']
}
];
}
@ -357,10 +357,9 @@ module.exports = class MessageLoggerV2 {
if (record.deletedata.deletetime) {
record.delete_data = {};
record.delete_data.time = record.deletedata.deletetime;
record.delete_data.rel_ids = record.deletedata.relativeids;
}
delete record.deletedata;
}
} else if (record.delete_data && typeof record.delete_data.rel_ids !== 'undefined') delete record.delete_data.rel_ids;
if (record.editHistory) {
record.edit_history = [];
for (let b in record.editHistory) {
@ -1743,7 +1742,8 @@ module.exports = class MessageLoggerV2 {
username: user.username,
avatar: user.avatar,
id: user.id,
bot: user.bot
bot: user.bot,
public_flags: typeof user.publicFlags !== 'undefined' ? user.publicFlags : user.public_flags
};
}
createMiniFormattedData(message) {
@ -1792,11 +1792,6 @@ module.exports = class MessageLoggerV2 {
/* ghost_pinged: false, */
delete_data: null /* {
time: integer,
rel_ids: [
string,
string,
string
],
hidden: bool
} */,
edit_history: null /* [
@ -2162,45 +2157,69 @@ module.exports = class MessageLoggerV2 {
red: false
});
}
reAddDeletedMessages(messages, id, deletedMessages, purgedMessages) {
// hack
if (this.antiinfiniteloop.findIndex(m => m === id) != -1) {
//this.showToast('Infinite loop detected in data! Faulty ID:' + id, { type: 'error', timeout: 5000 });
//ZeresPluginLibrary.Logger.err(this.getName(), `Infinite loop detected in data! Cancelled restore of ${id}!`);
// todo: add code to prevent this bullshit
return false;
_findLastIndex(array, predicate) {
let l = array.length;
while (l--) {
if (predicate(array[l], l, array))
return l;
}
const record = this.messageRecord[id];
if (!record || !record.delete_data || record.delete_data.hidden || !record.delete_data.rel_ids) return false;
return -1;
}
/*
how it works:
messages, stripped into IDs and times into var IDs:
[1, 2, 3, 4, 5, 6, 7]
^ ^
lowestTime highestTime
deletedMessages, stripped into IDs and times into var savedIDs:
sorted by time, newest to oldest
lowest IDX that is higher than lowestTime, unless channelEnd, then it's 0
highest IDX that is lower than highestTime, unless channelStart, then it's savedIDs.length - 1
this.antiinfiniteloop.push(record.message.id);
for (let prev in record.delete_data.rel_ids) {
let relID = record.delete_data.rel_ids[prev];
let mIDX = (messages.length && messages.length - 1) || 0;
let addIn = false;
if (relID != 'CHANNELEND') {
mIDX = messages.findIndex(m => m.id === relID);
}
if (mIDX !== -1) addIn = true;
else {
if (deletedMessages && deletedMessages.findIndex(m => m === relID) === -1 && (!this.settings.showPurgedMessages || !purgedMessages || purgedMessages.findIndex(m => m === relID) === -1)) continue;
if (this.reAddDeletedMessages(messages, relID)) addIn = true;
}
if (addIn) {
mIDX = messages.findIndex(m => m.id === relID);
//let copy = Object.assign({}, record.message);
//for (let attachmentIDX in copy.attachments) {
// let attachment = copy.attachments[attachmentIDX];
// console.log(attachment.proxy_url);
// attachment.proxy_url = this.imageCacheIdToDataURL(attachment.proxy_url);
// console.log(attachment.proxy_url);
//}
messages.splice(mIDX, 0, record.message);
return true;
}
savedIDs sliced start lowest IDX, end highest IDX + 1
appended IDs
sorted by time, oldest to newest
iterated, checked if ID is in messages, if not, fetch from this.messageRecord and splice it in at
specified index
*/
reAddDeletedMessages(messages, deletedMessages, channelStart, channelEnd) {
if (!messages.length || !deletedMessages.length) return;
const DISCORD_EPOCH = 14200704e5;
const IDs = [];
const savedIDs = [];
for (let i = 0, len = messages.length; i < len; i++) {
const { id } = messages[i];
IDs.push({ id: id, time: (id / 4194304) + DISCORD_EPOCH });
}
for (let i = 0, len = deletedMessages.length; i < len; i++) {
const id = deletedMessages[i];
const record = this.messageRecord[id];
if (!record) continue;
if (!record.delete_data) {
/* SOME WIZARD BROKE THE LOGGER LIKE THIS, WTFFFF */
this.deleteMessageFromRecords(recordID);
continue;
}
if (record.delete_data.hidden) continue;
savedIDs.push({ id: id, time: (id / 4194304) + DISCORD_EPOCH });
}
savedIDs.sort((a, b) => a.time - b.time);
if (!savedIDs.length) return;
const { time: lowestTime } = IDs[IDs.length - 1];
const [{ time: highestTime }] = IDs;
const lowestIDX = channelEnd ? 0 : savedIDs.findIndex(e => e.time > lowestTime);
if (lowestIDX === -1) return;
const highestIDX = channelStart ? savedIDs.length - 1 : this._findLastIndex(savedIDs, e => e.time < highestTime);
if (highestIDX === -1) return;
const reAddIDs = savedIDs.slice(lowestIDX, highestIDX + 1);
reAddIDs.push(...IDs);
reAddIDs.sort((a, b) => b.time - a.time);
for (let i = 0, len = reAddIDs.length; i < len; i++) {
const { id } = reAddIDs[i];
if (messages.findIndex((e) => e.id === id) !== -1) continue;
const { message } = this.messageRecord[id];
messages.splice(i, 0, message);
}
return false;
}
getLiteralName(guildId, channelId, useTags = false) {
// TODO, custom channel server failure text
@ -2238,28 +2257,6 @@ module.exports = class MessageLoggerV2 {
return 'DMs';
}
}
getRelativeMessages(id, channelId) {
const messages = this.channelMessages[channelId];
// ready check may be redundant, discord may not save the message if the channel isn't ready
if (messages && messages.ready && messages._array.length) {
let foundMessage = false;
let relMessages = [];
for (let i = messages._array.length - 1; i >= 0; i--) {
const message = messages._array[i];
if (!foundMessage && message.id == id) {
foundMessage = true;
continue;
}
if (foundMessage) relMessages.push(message.id);
if (relMessages.length >= 3) return relMessages;
} // todo, better caching if hasMoreBefore = true
if (!messages.hasMoreBefore) {
relMessages.push('CHANNELEND');
return relMessages;
}
}
return null;
}
saveDeletedMessage(message, targetMessageRecord) {
let result = this.createMiniFormattedData(message);
result.delete_data = {};
@ -2267,10 +2264,6 @@ module.exports = class MessageLoggerV2 {
const channelId = message.channel_id;
result.delete_data.time = new Date().getTime();
result.ghost_pinged = result.local_mentioned; // it's simple bruh
if (!(result.delete_data.rel_ids = this.getRelativeMessages(id, channelId))) {
//console.error(`[${this.getName()}]: saveDeletedMessage -> Failed to get relative IDs!`);
//if (this.settings.displayInChat) ZeresPluginLibrary.Toasts.error(`Failed to get relative IDs! Deleted message will not show in chat after reload!`, { timeout: 7500 });
}
if (!Array.isArray(targetMessageRecord[channelId])) targetMessageRecord[channelId] = [];
if (this.messageRecord[id]) {
const record = this.messageRecord[id];
@ -2625,42 +2618,26 @@ module.exports = class MessageLoggerV2 {
if (dispatch.jump && dispatch.jump.ML2) delete dispatch.jump;
const deletedMessages = this.deletedMessageRecord[channel.id];
const purgedMessages = this.purgedMessageRecord[channel.id];
try {
const recordIDs = [...(deletedMessages || []), ...(purgedMessages || [])];
const fetchUser = id => this.tools.getUser(id) || dispatch.messages.find(e => e.author.id === id)
for (let i = 0, len = recordIDs.length; i < len; i++) {
const id = recordIDs[i];
if (!this.messageRecord[id]) continue;
const { message } = this.messageRecord[id];
for (let j = 0, len2 = message.mentions.length; j < len2; j++) {
const user = message.mentions[j];
const cachedUser = fetchUser(user.id || user);
if (cachedUser) message.mentions[j] = this.cleanupUserObject(cachedUser);
}
const author = fetchUser(message.author.id);
if (!author) continue;
message.author = this.cleanupUserObject(author);
}
} catch { }
if ((!deletedMessages && !purgedMessages) || (!this.settings.showPurgedMessages && !this.settings.showDeletedMessages)) return callDefault(...args);
//console.log('Recursively adding deleted messages');
/* return callDefault(...args); */
if (this.settings.showDeletedMessages && deletedMessages) {
for (let messageIDX in deletedMessages) {
let recordID = deletedMessages[messageIDX];
if (!this.messageRecord[recordID]) continue;
if (!this.messageRecord[recordID].delete_data) {
/* SOME WIZARD BROKE THE LOGGER LIKE THIS, WTFFFF */
this.deleteMessageFromRecords(recordID);
continue;
}
if (this.messageRecord[recordID].delete_data.hidden) {
const mIDX = dispatch.messages.findIndex(m => m.id === recordID);
if (mIDX != -1) dispatch.messages.splice(mIDX, 1);
continue;
}
if (this.messageRecord[recordID].message.channel_id != dispatch.channelId || dispatch.messages.findIndex(m => m.id === recordID) != -1) continue;
this.antiinfiniteloop = [];
this.reAddDeletedMessages(dispatch.messages, recordID, deletedMessages, purgedMessages);
}
}
if (this.settings.showPurgedMessages && purgedMessages) {
for (let messageIDX in purgedMessages) {
let recordID = purgedMessages[messageIDX];
if (!this.messageRecord[recordID]) continue;
if (this.messageRecord[recordID].delete_data.hidden) {
const mIDX = dispatch.messages.findIndex(m => m.id === recordID);
if (mIDX != -1) dispatch.messages.splice(mIDX, 1);
continue;
}
if (this.messageRecord[recordID].message.channel_id != dispatch.channelId || dispatch.messages.findIndex(m => m.id == recordID) != -1) continue;
this.antiinfiniteloop = [];
this.reAddDeletedMessages(dispatch.messages, recordID, deletedMessages, purgedMessages);
}
}
if (this.settings.showDeletedMessages && deletedMessages) this.reAddDeletedMessages(dispatch.messages, deletedMessages, !dispatch.hasMoreAfter && !dispatch.isBefore, !dispatch.hasMoreBefore && !dispatch.isAfter);
if (this.settings.showPurgedMessages && purgedMessages) this.reAddDeletedMessages(dispatch.messages, purgedMessages, !dispatch.hasMoreAfter && !dispatch.isBefore, !dispatch.hasMoreBefore && !dispatch.isAfter);
return callDefault(...args);
}
@ -4109,7 +4086,6 @@ module.exports = class MessageLoggerV2 {
ml2Data: true,
className: this.style.menuRoot,
ref: e => {
console.log(ref);
if (!e) return;
/* advanced tech! */
const stateNode = ZeresPluginLibrary.Utilities.getNestedProp(e, '_reactInternalFiber.return.return.stateNode.firstChild.childNodes.1.firstChild');