Init
Signed-off-by: Georg <georg@lysergic.dev>
This commit is contained in:
		
						commit
						03326d7d78
					
				
							
								
								
									
										11
									
								
								README.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										11
									
								
								README.md
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,11 @@
 | 
			
		||||
### TripSit related modules for dbot - revived
 | 
			
		||||
 | 
			
		||||
This houses forks of dbot modules specific to the TripSit IRC network.
 | 
			
		||||
 | 
			
		||||
The following issues have been resolved:
 | 
			
		||||
 | 
			
		||||
- Replaced alsuti uploader with a generic, self-hosted, https (curl) endpoint for dose log uploads
 | 
			
		||||
 | 
			
		||||
### Credits
 | 
			
		||||
 | 
			
		||||
All credits go to https://github.com/reality/ - Thank you for having made dbot and these modules possible. It served countless of users well over several years - and albeit bundled with the occasional complaints and bugs, it never left its place in many, many hearts.
 | 
			
		||||
							
								
								
									
										129
									
								
								idose/idose.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										129
									
								
								idose/idose.js
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,129 @@
 | 
			
		||||
/**
 | 
			
		||||
 * Module Name: idose
 | 
			
		||||
 * Description: dose recording
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
var moment = require('moment-timezone'),
 | 
			
		||||
    _ = require('underscore')._,
 | 
			
		||||
    fs = require('fs'),
 | 
			
		||||
    exec = require('child_process').exec;
 | 
			
		||||
 | 
			
		||||
var idose = function(dbot) {
 | 
			
		||||
  var self = this;
 | 
			
		||||
 | 
			
		||||
  this.api = {
 | 
			
		||||
    // Save new dose entry
 | 
			
		||||
    'saveLastDose': function(user, drug, dose, callback) {
 | 
			
		||||
      var lDose = {
 | 
			
		||||
        'time': Date.now(),
 | 
			
		||||
        'drug': drug,
 | 
			
		||||
        'dose': dose
 | 
			
		||||
      };
 | 
			
		||||
 | 
			
		||||
      if(!_.has(dbot.db.idose, user) || !_.isArray(dbot.db.idose[user])) {
 | 
			
		||||
        dbot.db.idose[user] = [];
 | 
			
		||||
      }
 | 
			
		||||
      dbot.db.idose[user].push(lDose);
 | 
			
		||||
 | 
			
		||||
      callback(lDose);
 | 
			
		||||
    },
 | 
			
		||||
 | 
			
		||||
    // Retrieve user's last dose, by id
 | 
			
		||||
    'getLastDose': function(user, callback) {
 | 
			
		||||
      callback(_.last(dbot.db.idose[user.id])); 
 | 
			
		||||
    },
 | 
			
		||||
 | 
			
		||||
    'alsutu': function(user, tz) { // TODO: this belongs in its own module and is generally hax, bad
 | 
			
		||||
      tz = tz || 'Europe/London';
 | 
			
		||||
      var out = 'drug\tdose\ttime';
 | 
			
		||||
 | 
			
		||||
      _.each(dbot.db.idose[user.id], function(entry) {
 | 
			
		||||
        out += '\n'+entry.drug+'\t'+entry.dose+'\t'+moment(entry.time).tz(tz).format('HH:mm:ss DD/MM/YYYY');
 | 
			
		||||
      });
 | 
			
		||||
 | 
			
		||||
      fs.writeFileSync('/tmp/'+user.id+'dd.txt', out);
 | 
			
		||||
 | 
			
		||||
      function puts(error, stdout, stderr) { 
 | 
			
		||||
        var res = stdout.split('\n');        
 | 
			
		||||
        dbot.say(user.id.split('.')[1], user.primaryNick, 'New idose log at: ' + res); 
 | 
			
		||||
      }
 | 
			
		||||
      exec("/bin/curl -sT "+"/tmp/"+user.id+'dd.txt '+"https://hugz.io/"+randomString(12, '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'), puts);
 | 
			
		||||
    }
 | 
			
		||||
  };
 | 
			
		||||
 | 
			
		||||
  this.commands = {
 | 
			
		||||
    'idose': function(event) {
 | 
			
		||||
      var dose = event.params[1]
 | 
			
		||||
          dName = event.params[2],
 | 
			
		||||
          roa = event.params[3];
 | 
			
		||||
 | 
			
		||||
      if(roa) {
 | 
			
		||||
        roa = capitalise(roa);
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
      dbot.api.tripsit.getDrug(dName, function(drug) {
 | 
			
		||||
        if(drug) {
 | 
			
		||||
          self.api.saveLastDose(event.rUser.id, dName, dose, function(lDose) {
 | 
			
		||||
            dName = drug.pretty_name;
 | 
			
		||||
            var tz = event.rProfile.timezone || 'Europe/London';
 | 
			
		||||
            var out = 'Dosed ' + dose + ' ' + dName + ' at ' + moment(lDose.time).tz(tz).format('HH:mm:ss on DD/MM/YYYY');
 | 
			
		||||
            if(roa) {
 | 
			
		||||
              out += ' via ' + roa;
 | 
			
		||||
            }
 | 
			
		||||
            out += '.';
 | 
			
		||||
 | 
			
		||||
            if(_.has(drug, 'formatted_onset')) {
 | 
			
		||||
              if(_.has(drug.formatted_onset, roa)) {
 | 
			
		||||
                out += ' You should start to feel effects ' + drug.formatted_onset[roa] + ' ' + (drug.formatted_onset._unit ? (drug.formatted_onset._unit + ' ') : '') + 'from now.'
 | 
			
		||||
              } else if(_.has(drug.formatted_onset, 'value')) {
 | 
			
		||||
                out += ' You should start to feel effects ' + drug.formatted_onset.value + ' ' + (drug.formatted_onset._unit ? (drug.formatted_onset._unit + ' ') : '') + 'from now.'
 | 
			
		||||
              }
 | 
			
		||||
            }
 | 
			
		||||
            out += ' (BTW, you can run ~set upidose true to have tripbot upload an encrypted version of your dose history to you upon updates).'
 | 
			
		||||
            event.reply(out);
 | 
			
		||||
 | 
			
		||||
            if(event.rProfile.upidose === "true") {
 | 
			
		||||
              self.api.alsutu(event.rUser, tz);
 | 
			
		||||
            }
 | 
			
		||||
          });
 | 
			
		||||
        } else {
 | 
			
		||||
          event.reply("I have not heard of that drug before mate, take a look at the list on http://drugs.tripsit.me/");
 | 
			
		||||
        }
 | 
			
		||||
      });
 | 
			
		||||
    },
 | 
			
		||||
    
 | 
			
		||||
    'lastdose': function(event) {
 | 
			
		||||
      this.api.getLastDose(event.rUser, function(lDose) {
 | 
			
		||||
        if(lDose) {
 | 
			
		||||
          var tz = event.rProfile.timezone || 'Europe/London';
 | 
			
		||||
          var out = 'You last dosed ' + lDose.dose + ' of ' + lDose.drug 
 | 
			
		||||
                  + ' ' + moment(lDose.time).toNow(true) + ' ago (' 
 | 
			
		||||
                  + moment(lDose.time).tz(tz).format('HH:mm:ss on DD/MM/YYYY') 
 | 
			
		||||
                  + ' ' + tz + ').';
 | 
			
		||||
          event.reply(out);
 | 
			
		||||
        } else {
 | 
			
		||||
          event.reply('No last dose recorded');
 | 
			
		||||
        }
 | 
			
		||||
      });
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  this.onLoad = function() {
 | 
			
		||||
    if(!dbot.db.idose) {
 | 
			
		||||
      dbot.db.idose = {};
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
};
 | 
			
		||||
 
 | 
			
		||||
exports.fetch = function(dbot) {
 | 
			
		||||
    return new idose(dbot);
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
function capitalise(string) {
 | 
			
		||||
  return string.charAt(0).toUpperCase() + string.slice(1);
 | 
			
		||||
}
 | 
			
		||||
function randomString(length, chars) {
 | 
			
		||||
  var result = '';
 | 
			
		||||
  for (var i = length; i > 0; --i) result += chars[Math.floor(Math.random() * chars.length)];
 | 
			
		||||
  return result;
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										1
									
								
								tripsit/INSTALL
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								tripsit/INSTALL
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1 @@
 | 
			
		||||
Move views/tripsit to dbot /views/tripsit
 | 
			
		||||
							
								
								
									
										565
									
								
								tripsit/api.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										565
									
								
								tripsit/api.js
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,565 @@
 | 
			
		||||
var _ = require('underscore'),
 | 
			
		||||
    databank = require('databank'),
 | 
			
		||||
    async = require('async');
 | 
			
		||||
 | 
			
		||||
var api = function(dbot) {
 | 
			
		||||
    var api = {
 | 
			
		||||
        'getDrugCategory': function(name, callback) {
 | 
			
		||||
          name = name.toLowerCase();
 | 
			
		||||
          this.db.read('drug_categories', name, function(err, cat) {
 | 
			
		||||
            callback(cat);
 | 
			
		||||
          });
 | 
			
		||||
        },
 | 
			
		||||
 | 
			
		||||
        'getIRCFormattedDrug': function(name, property, callback) {
 | 
			
		||||
           this.api.getDrug(name, function(drug) {
 | 
			
		||||
                if(drug && !_.has(drug, 'err')) {
 | 
			
		||||
                    if(_.has(drug, 'links') && _.has(drug.links, 'experiences')) {
 | 
			
		||||
                      drug.properties.experiences = drug.links.experiences;
 | 
			
		||||
                    }
 | 
			
		||||
                    if(!_.isUndefined(property)) {
 | 
			
		||||
                        if(_.has(drug.properties, property)) {
 | 
			
		||||
                            var info = drug.properties[property];
 | 
			
		||||
 | 
			
		||||
                            // TODO: Remove magic vars and move to formatProperty API func
 | 
			
		||||
                            if(property == 'dose') {
 | 
			
		||||
                                info = info.replace(/Threshold:/gi, "\u00032Threshold\u000f:");
 | 
			
		||||
                                info = info.replace(/Light:/gi, "\u00033Light\u000f:");
 | 
			
		||||
                                info = info.replace(/Common:/gi, "\u00037Common\u000f:");
 | 
			
		||||
                                info = info.replace(/Strong:/gi, "\u00035Strong\u000f:");
 | 
			
		||||
                                info = info.replace(/Heavy:/gi, "\u00034Heavy\u000f:");
 | 
			
		||||
                            }
 | 
			
		||||
 | 
			
		||||
                            if(property == 'aliases') info = info.join(', ');
 | 
			
		||||
 | 
			
		||||
                            callback(name + ' ' + property + ': ' + info);
 | 
			
		||||
                        } else {
 | 
			
		||||
                            callback(name + ' Info: ' + _.keys(drug.properties).join(', ') + ' - http://drugs.tripsit.me/' + drug.name);
 | 
			
		||||
                        }
 | 
			
		||||
                    } else {
 | 
			
		||||
                      callback(name + ' Info: ' + _.keys(drug.properties).join(', ') + ' - http://drugs.tripsit.me/' + drug.name);
 | 
			
		||||
                    }
 | 
			
		||||
                } else {
 | 
			
		||||
                    callback(null);
 | 
			
		||||
                }
 | 
			
		||||
            });
 | 
			
		||||
 | 
			
		||||
        },
 | 
			
		||||
 | 
			
		||||
        'getInteraction': function(drugAName, drugBName, callback) {
 | 
			
		||||
          drugAName = drugAName.toLowerCase();
 | 
			
		||||
          drugBName = drugBName.toLowerCase();
 | 
			
		||||
 | 
			
		||||
          if(drugAName == 'ssri' || drugAName == 'snri' || drugAName == 'snris') {
 | 
			
		||||
            drugAName = 'ssris';
 | 
			
		||||
          } else if(drugAName == 'maoi') {
 | 
			
		||||
            drugAName = 'maois';
 | 
			
		||||
          }
 | 
			
		||||
 | 
			
		||||
          if(drugBName == 'ssri' || drugBName == 'snri' || drugBName == 'snris') {
 | 
			
		||||
            drugBName = 'ssris';
 | 
			
		||||
          } else if(drugBName == 'maoi') {
 | 
			
		||||
            drugBName = 'maois';
 | 
			
		||||
          }
 | 
			
		||||
 | 
			
		||||
          this.api.getDrug(drugAName, function(drugA) {
 | 
			
		||||
            if(!_.has(drugA, 'err') || _.has(this.combos, drugAName)) {
 | 
			
		||||
              this.api.getDrug(drugBName, function(drugB) {
 | 
			
		||||
                if(!_.has(drugB, 'err') || _.has(this.combos, drugBName)) {
 | 
			
		||||
                  var safetyCategoryA = null,
 | 
			
		||||
                      safetyCategoryB = null;
 | 
			
		||||
 | 
			
		||||
                  if(_.has(this.combos, drugAName)) {
 | 
			
		||||
                    safetyCategoryA = drugAName;
 | 
			
		||||
                  } else if(_.has(this.combos, drugA.name)) {
 | 
			
		||||
                    safetyCategoryA = drugA.name;
 | 
			
		||||
                  } else if(drugA.name.match(/^do.$/i)) {
 | 
			
		||||
                    safetyCategoryA = 'dox';
 | 
			
		||||
                  } else if(drugA.name.match(/^2c-.$/i)) {
 | 
			
		||||
                    safetyCategoryA = '2c-x';
 | 
			
		||||
                  } else if(drugA.name.match(/^25.-nbome/i)) {
 | 
			
		||||
                    safetyCategoryA = 'nbomes';
 | 
			
		||||
                  } else if(drugA.name.match(/^5-meo-..t$/i)) {
 | 
			
		||||
                    safetyCategoryA = '5-meo-xxt';
 | 
			
		||||
                  } else if(_.include(drugA.categories, 'benzodiazepine')) {
 | 
			
		||||
                    safetyCategoryA = 'benzodiazepines'; 
 | 
			
		||||
                  } else if(_.include(drugA.categories, 'opioid')) {
 | 
			
		||||
                    safetyCategoryA = 'opioids'; 
 | 
			
		||||
                  } else if(_.include(drugB.categories, 'benzo')) {
 | 
			
		||||
                    safetyCategoryB = 'benzos';
 | 
			
		||||
                  } else if(_.include(drugA.categories, 'stimulant')) {
 | 
			
		||||
                    safetyCategoryA = 'amphetamines'; 
 | 
			
		||||
                  } else if(drugA.name == 'ghb' || drugA.name == 'gbl') {
 | 
			
		||||
                    safetyCategoryA = 'ghb/gbl';
 | 
			
		||||
                  }                   
 | 
			
		||||
                  if(_.has(this.combos, drugBName)) {
 | 
			
		||||
                    safetyCategoryB = drugBName;
 | 
			
		||||
                  } else if(_.has(this.combos, drugB.name)) {
 | 
			
		||||
                    safetyCategoryB = drugB.name;
 | 
			
		||||
                  } else if(drugB.name.match(/^do.$/i)) {
 | 
			
		||||
                    safetyCategoryB = 'dox';
 | 
			
		||||
                  } else if(drugB.name.match(/^2c-.$/i)) {
 | 
			
		||||
                    safetyCategoryB = '2c-x';
 | 
			
		||||
                  } else if(drugB.name.match(/^25.-nbome/i)) {
 | 
			
		||||
                    safetyCategoryB = 'nbomes';
 | 
			
		||||
                  } else if(drugB.name.match(/^5-meo-..t$/i)) {
 | 
			
		||||
                    safetyCategoryB = '5-meo-xxt';
 | 
			
		||||
                  } else if(_.include(drugB.categories, 'benzodiazepine')) {
 | 
			
		||||
                    safetyCategoryB = 'benzodiazepines'; 
 | 
			
		||||
                  } else if(_.include(drugB.categories, 'opioid')) {
 | 
			
		||||
                    safetyCategoryB = 'opioids';
 | 
			
		||||
                  } else if(_.include(drugB.categories, 'benzo')) {
 | 
			
		||||
                    safetyCategoryB = 'benzos';
 | 
			
		||||
                  } else if(_.include(drugB.categories, 'stimulant')) {
 | 
			
		||||
                    safetyCategoryB = 'amphetamines'; 
 | 
			
		||||
                  } else if(drugB.name == 'ghb' || drugB.name == 'gbl') {
 | 
			
		||||
                    safetyCategoryB = 'ghb/gbl';
 | 
			
		||||
                  } 
 | 
			
		||||
 | 
			
		||||
                  if(safetyCategoryA && safetyCategoryB) {
 | 
			
		||||
                    if(safetyCategoryA != safetyCategoryB) {
 | 
			
		||||
                      var result = _.clone(this.combos[safetyCategoryA][safetyCategoryB]);
 | 
			
		||||
                      result['interactionCategoryA'] = safetyCategoryA;
 | 
			
		||||
                      result['interactionCategoryB'] = safetyCategoryB;
 | 
			
		||||
                      return callback(result); 
 | 
			
		||||
                    } else {
 | 
			
		||||
                      if(safetyCategoryA == 'benzodiazepines') {
 | 
			
		||||
                        return callback({'err': true, 'code': 'ssb', 'msg': 'Drug A and B are the same safety category.'});
 | 
			
		||||
                      } else {
 | 
			
		||||
                        return callback({'err': true, 'code': 'ssc', 'msg': 'Drug A and B are the same safety category.'});
 | 
			
		||||
                      }
 | 
			
		||||
                    }
 | 
			
		||||
                  } else {
 | 
			
		||||
                    return callback(false);
 | 
			
		||||
                  }
 | 
			
		||||
                } else {
 | 
			
		||||
                  return callback({'err': true, 'msg': 'Drug B not found.'});
 | 
			
		||||
                }
 | 
			
		||||
              }.bind(this));
 | 
			
		||||
            } else {
 | 
			
		||||
              return callback({'err': true, 'msg': 'Drug A not found.'});
 | 
			
		||||
            }
 | 
			
		||||
          }.bind(this));
 | 
			
		||||
        },
 | 
			
		||||
 | 
			
		||||
        'getDrug': function(name, callback) {
 | 
			
		||||
            name = name.toLowerCase();
 | 
			
		||||
            this.db.read('drugs', name, function(err, drug) {
 | 
			
		||||
                if(!drug) {
 | 
			
		||||
                    this.db.scan('drugs', function(dMatch) {
 | 
			
		||||
                        if(_.include(dMatch.aliases, name)) {
 | 
			
		||||
                            drug = dMatch;
 | 
			
		||||
			    if(!_.isUndefined(drug.aliases)) drug.properties.aliases = drug.aliases;
 | 
			
		||||
                        }
 | 
			
		||||
                    }, function() {
 | 
			
		||||
			if(drug) {
 | 
			
		||||
                    if(!_.isUndefined(drug.aliases)) drug.properties.aliases = drug.aliases;
 | 
			
		||||
                    if(!_.isUndefined(drug.categories)) drug.properties.categories = drug.categories;
 | 
			
		||||
 | 
			
		||||
                    if(_.has(dbot.modules.tripsit.combos, drug.name)) {
 | 
			
		||||
                      drug.combos = dbot.modules.tripsit.combos[drug.name];
 | 
			
		||||
                    }
 | 
			
		||||
 | 
			
		||||
if(_.has(drug.properties, 'dose')) {
 | 
			
		||||
				var doses = drug.properties.dose.split('|');
 | 
			
		||||
				var regex = /(([\w-]+):\s([\/\.\w\d-\+µ]+))/ig;
 | 
			
		||||
				drug.formatted_dose = {};
 | 
			
		||||
				if(doses.length > 1 || !doses[0].split(' ')[0].match(':')) {
 | 
			
		||||
					_.each(doses, function(dString) {
 | 
			
		||||
						dString = dString.replace(/\s\s+/g, ' ');
 | 
			
		||||
						var roa = dString.trim().split(' ')[0];
 | 
			
		||||
						var match = regex.exec(dString);
 | 
			
		||||
						if(roa.match(/note/i)) {
 | 
			
		||||
							drug.dose_note = dString;
 | 
			
		||||
						} else {
 | 
			
		||||
							drug.formatted_dose[roa] = {};
 | 
			
		||||
							while(match != null) {
 | 
			
		||||
								drug.formatted_dose[roa][match[2]] = match[3];
 | 
			
		||||
								match = regex.exec(dString);
 | 
			
		||||
							}
 | 
			
		||||
						}
 | 
			
		||||
					});	
 | 
			
		||||
				} else {
 | 
			
		||||
					var roa = 'Oral';
 | 
			
		||||
					var match = regex.exec(doses[0]);
 | 
			
		||||
						if(roa.match(/note/i)) {
 | 
			
		||||
							drug.dose_note = doses[0];
 | 
			
		||||
						} else {
 | 
			
		||||
							drug.formatted_dose[roa] = {};
 | 
			
		||||
							while(match != null) {
 | 
			
		||||
								drug.formatted_dose[roa][match[2]] = match[3];
 | 
			
		||||
								match = regex.exec(doses[0]);
 | 
			
		||||
							}
 | 
			
		||||
						}
 | 
			
		||||
				}
 | 
			
		||||
}
 | 
			
		||||
				if(_.has(drug.properties, 'effects')) {
 | 
			
		||||
					drug.formatted_effects = _.collect(drug.properties.effects.split(/[\.,]+/), function(item) {
 | 
			
		||||
						return item.trim();
 | 
			
		||||
					});
 | 
			
		||||
				}
 | 
			
		||||
 | 
			
		||||
				if(_.has(drug.properties, 'duration')) {
 | 
			
		||||
					var roas = drug.properties.duration.split('|');
 | 
			
		||||
						drug.formatted_duration = {};
 | 
			
		||||
					if(roas.length > 1 || roas[0].match(':')) {
 | 
			
		||||
						_.each(roas, function(roa) {
 | 
			
		||||
 | 
			
		||||
                        if(roa.toLowerCase().match('note')) {
 | 
			
		||||
                          return;
 | 
			
		||||
                        }
 | 
			
		||||
							var match = roa.match(/([\w-\/]+):?\s([\.\w\d-\+]+)/i);
 | 
			
		||||
if(match) {
 | 
			
		||||
							drug.formatted_duration[match[1]] = match[2];
 | 
			
		||||
}
 | 
			
		||||
						});
 | 
			
		||||
					} else {
 | 
			
		||||
						var match = drug.properties['duration'].match(/([\.\w\d-\+]+)/i);
 | 
			
		||||
						drug.formatted_duration = {'value':match[1]};
 | 
			
		||||
					}
 | 
			
		||||
					if(drug.properties.duration.indexOf('minutes') != -1) {
 | 
			
		||||
						drug.formatted_duration._unit = 'minutes';
 | 
			
		||||
					}
 | 
			
		||||
					if(drug.properties.duration.indexOf('hours') != -1) {
 | 
			
		||||
						drug.formatted_duration._unit = 'hours';
 | 
			
		||||
					}
 | 
			
		||||
				}
 | 
			
		||||
 | 
			
		||||
				if(_.has(drug.properties, 'onset')) {
 | 
			
		||||
					var roas = drug.properties.onset.split('|');
 | 
			
		||||
					drug.formatted_onset = {};
 | 
			
		||||
					if(roas.length > 1 || roas[0].match(':')) {
 | 
			
		||||
						_.each(roas, function(roa) {
 | 
			
		||||
                        if(roa.toLowerCase().match('note')) {
 | 
			
		||||
                          return;
 | 
			
		||||
                        }
 | 
			
		||||
							var match = roa.match(/([\w-\/]+):?\s([\.\w\d-\+]+)/i);
 | 
			
		||||
if(match) {
 | 
			
		||||
							drug.formatted_onset[match[1]] = match[2];
 | 
			
		||||
}
 | 
			
		||||
						});
 | 
			
		||||
					} else {
 | 
			
		||||
						var match = drug.properties['onset'].match(/([\.\w\d-\+]+)/i);
 | 
			
		||||
						drug.formatted_onset = {'value':match[1]};
 | 
			
		||||
					}
 | 
			
		||||
					if(drug.properties.onset.indexOf('minutes') != -1) {
 | 
			
		||||
						drug.formatted_onset._unit = 'minutes';
 | 
			
		||||
					}
 | 
			
		||||
					if(drug.properties.onset.indexOf('hours') != -1) {
 | 
			
		||||
						drug.formatted_onset._unit = 'hours';
 | 
			
		||||
					}
 | 
			
		||||
				}
 | 
			
		||||
 | 
			
		||||
				if(_.has(drug.properties, 'after-effects')) {
 | 
			
		||||
					var roas = drug.properties['after-effects'].split('|');
 | 
			
		||||
						drug.formatted_aftereffects = {};
 | 
			
		||||
					if(roas.length > 1 || roas[0].match(':')) {
 | 
			
		||||
						_.each(roas, function(roa) {
 | 
			
		||||
 | 
			
		||||
                        if(roa.toLowerCase().match('note')) {
 | 
			
		||||
                          return;
 | 
			
		||||
                        }
 | 
			
		||||
							var match = roa.match(/([\w\/]+):?\s([\.\w\d-\+]+)/i);
 | 
			
		||||
if(match) {
 | 
			
		||||
							drug.formatted_aftereffects[match[1]] = match[2];
 | 
			
		||||
}
 | 
			
		||||
						});
 | 
			
		||||
					} else {
 | 
			
		||||
						var match = drug.properties['after-effects'].match(/([\.\w\d-\+]+)/i);
 | 
			
		||||
						drug.formatted_aftereffects = {'value':match[1]};
 | 
			
		||||
					}
 | 
			
		||||
					if(drug.properties['after-effects'].indexOf('minutes') != -1) {
 | 
			
		||||
						drug.formatted_aftereffects._unit = 'minutes';
 | 
			
		||||
					}
 | 
			
		||||
					if(drug.properties['after-effects'].indexOf('hours') != -1) {
 | 
			
		||||
						drug.formatted_aftereffects._unit = 'hours';
 | 
			
		||||
					}
 | 
			
		||||
				}
 | 
			
		||||
if(!_.has(drug, 'pretty_name')) {
 | 
			
		||||
drug.pretty_name = drug.name;
 | 
			
		||||
if(drug.name.length <= 4 || drug.name.indexOf('-') != -1) {
 | 
			
		||||
			drug.pretty_name = drug.name.toUpperCase();
 | 
			
		||||
		} else {
 | 
			
		||||
			drug.pretty_name = drug.name.charAt(0).toUpperCase() + drug.name.slice(1);
 | 
			
		||||
		}
 | 
			
		||||
drug.pretty_name = drug.pretty_name.replace(/MEO/, 'MeO');
 | 
			
		||||
drug.pretty_name = drug.pretty_name.replace(/ACO/, 'AcO');
 | 
			
		||||
drug.pretty_name = drug.pretty_name.replace(/NBOME/, 'NBOMe');
 | 
			
		||||
drug.pretty_name = drug.pretty_name.replace(/MIPT/, 'MiPT');
 | 
			
		||||
drug.pretty_name = drug.pretty_name.replace(/DIPT/, 'DiPT');
 | 
			
		||||
}
 | 
			
		||||
			}
 | 
			
		||||
 | 
			
		||||
			if(drug) {
 | 
			
		||||
				callback(drug);
 | 
			
		||||
			} else {
 | 
			
		||||
				callback({'err': true, 'msg': 'No drug found.'});
 | 
			
		||||
			}
 | 
			
		||||
                    });
 | 
			
		||||
                } else {
 | 
			
		||||
 | 
			
		||||
			if(drug) {
 | 
			
		||||
                    if(!_.isUndefined(drug.aliases)) drug.properties.aliases = drug.aliases;
 | 
			
		||||
                    if(!_.isUndefined(drug.categories)) drug.properties.categories = drug.categories;
 | 
			
		||||
 | 
			
		||||
                    if(_.has(dbot.modules.tripsit.combos, drug.name)) {
 | 
			
		||||
                      drug.combos = dbot.modules.tripsit.combos[drug.name];
 | 
			
		||||
                    }
 | 
			
		||||
            if(_.has(drug.properties, 'dose')) {
 | 
			
		||||
				var doses = drug.properties.dose.split('|');
 | 
			
		||||
				var regex = /(([\w-]+):\s([\/\.\w\d-\+µ]+))/ig;
 | 
			
		||||
				drug.formatted_dose = {};
 | 
			
		||||
				if(doses.length > 1 || !doses[0].split(' ')[0].match(':')) {
 | 
			
		||||
					_.each(doses, function(dString) {
 | 
			
		||||
						dString = dString.replace(/\s\s+/g, ' ');
 | 
			
		||||
						var roa = dString.trim().split(' ')[0];
 | 
			
		||||
						var match = regex.exec(dString);
 | 
			
		||||
						if(roa.match(/note/i)) {
 | 
			
		||||
							drug.dose_note = dString;
 | 
			
		||||
						} else {
 | 
			
		||||
							drug.formatted_dose[roa] = {};
 | 
			
		||||
							while(match != null) {
 | 
			
		||||
								drug.formatted_dose[roa][match[2]] = match[3];
 | 
			
		||||
								match = regex.exec(dString);
 | 
			
		||||
							}
 | 
			
		||||
						}
 | 
			
		||||
					});	
 | 
			
		||||
				} else {
 | 
			
		||||
					var roa = 'Oral';
 | 
			
		||||
					var match = regex.exec(doses[0]);
 | 
			
		||||
						if(roa.match(/note/i)) {
 | 
			
		||||
							drug.dose_note = doses[0];
 | 
			
		||||
						} else {
 | 
			
		||||
							drug.formatted_dose[roa] = {};
 | 
			
		||||
							while(match != null) {
 | 
			
		||||
								drug.formatted_dose[roa][match[2]] = match[3];
 | 
			
		||||
								match = regex.exec(doses[0]);
 | 
			
		||||
							}
 | 
			
		||||
						}
 | 
			
		||||
				}
 | 
			
		||||
				
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
				if(_.has(drug.properties, 'effects')) {
 | 
			
		||||
					drug.formatted_effects = _.collect(drug.properties.effects.split(/[\.,]+/), function(item) {
 | 
			
		||||
						return item.trim();
 | 
			
		||||
					});
 | 
			
		||||
				}
 | 
			
		||||
 | 
			
		||||
				if(_.has(drug.properties, 'duration')) {
 | 
			
		||||
					var roas = drug.properties.duration.split('|');
 | 
			
		||||
						drug.formatted_duration = {};
 | 
			
		||||
					if(roas.length > 1 || roas[0].match(':')) {
 | 
			
		||||
						_.each(roas, function(roa) {
 | 
			
		||||
 | 
			
		||||
                        if(roa.toLowerCase().match('note')) {
 | 
			
		||||
                          return;
 | 
			
		||||
                        }
 | 
			
		||||
							var match = roa.match(/([\w-\/]+):?\s([\.\w\d-\+]+)/i);
 | 
			
		||||
if(match) {
 | 
			
		||||
							drug.formatted_duration[match[1]] = match[2];
 | 
			
		||||
}
 | 
			
		||||
						});
 | 
			
		||||
					} else {
 | 
			
		||||
						var match = drug.properties['duration'].match(/([\.\w\d-\+]+)/i);
 | 
			
		||||
						drug.formatted_duration = {'value':match[1]};
 | 
			
		||||
					}
 | 
			
		||||
					if(drug.properties.duration.indexOf('minutes') != -1) {
 | 
			
		||||
						drug.formatted_duration._unit = 'minutes';
 | 
			
		||||
					}
 | 
			
		||||
					if(drug.properties.duration.indexOf('hours') != -1) {
 | 
			
		||||
						drug.formatted_duration._unit = 'hours';
 | 
			
		||||
					}
 | 
			
		||||
				}
 | 
			
		||||
 | 
			
		||||
				if(_.has(drug.properties, 'onset')) {
 | 
			
		||||
					var roas = drug.properties.onset.split('|');
 | 
			
		||||
					drug.formatted_onset = {};
 | 
			
		||||
					if(roas.length > 1 || roas[0].match(':')) {
 | 
			
		||||
						_.each(roas, function(roa) {
 | 
			
		||||
 | 
			
		||||
                        if(roa.toLowerCase().match('note')) {
 | 
			
		||||
                          return;
 | 
			
		||||
                        }
 | 
			
		||||
							var match = roa.match(/([\/\w-]+):??\s([\.\w\d-\+]+)/i);
 | 
			
		||||
if(match) {
 | 
			
		||||
							drug.formatted_onset[match[1]] = match[2];
 | 
			
		||||
}
 | 
			
		||||
						});
 | 
			
		||||
					} else {
 | 
			
		||||
						var match = drug.properties['onset'].match(/([\.\w\d-\+]+)/i);
 | 
			
		||||
						drug.formatted_onset = {'value':match[1]};
 | 
			
		||||
					}
 | 
			
		||||
					if(drug.properties.onset.indexOf('minutes') != -1) {
 | 
			
		||||
						drug.formatted_onset._unit = 'minutes';
 | 
			
		||||
					}
 | 
			
		||||
					if(drug.properties.onset.indexOf('hours') != -1) {
 | 
			
		||||
						drug.formatted_onset._unit = 'hours';
 | 
			
		||||
					}
 | 
			
		||||
				}
 | 
			
		||||
 | 
			
		||||
				if(_.has(drug.properties, 'after-effects')) {
 | 
			
		||||
					var roas = drug.properties['after-effects'].split('|');
 | 
			
		||||
						drug.formatted_aftereffects = {};
 | 
			
		||||
					if(roas.length > 1 || roas[0].match(':')) {
 | 
			
		||||
						_.each(roas, function(roa) {
 | 
			
		||||
 | 
			
		||||
                        if(roa.toLowerCase().match('note')) {
 | 
			
		||||
                          return;
 | 
			
		||||
                        }
 | 
			
		||||
							var match = roa.match(/([\w\/]+):?\s([\.\w\d-\+]+)/i);
 | 
			
		||||
if(match) {
 | 
			
		||||
							drug.formatted_aftereffects[match[1]] = match[2];
 | 
			
		||||
}
 | 
			
		||||
						});
 | 
			
		||||
					} else {
 | 
			
		||||
						var match = drug.properties['after-effects'].match(/([\.\w\d-\+]+)/i);
 | 
			
		||||
						drug.formatted_aftereffects = {'value':match[1]};
 | 
			
		||||
					}
 | 
			
		||||
					if(drug.properties['after-effects'].indexOf('minutes') != -1) {
 | 
			
		||||
						drug.formatted_aftereffects._unit = 'minutes';
 | 
			
		||||
					}
 | 
			
		||||
					if(drug.properties['after-effects'].indexOf('hours') != -1) {
 | 
			
		||||
						drug.formatted_aftereffects._unit = 'hours';
 | 
			
		||||
					}
 | 
			
		||||
				}
 | 
			
		||||
 | 
			
		||||
if(!_.has(drug, 'pretty_name')) {
 | 
			
		||||
drug.pretty_name = drug.name;
 | 
			
		||||
		if(drug.name.length <= 4 || drug.name.indexOf('-') != -1) {
 | 
			
		||||
			drug.pretty_name = drug.name.toUpperCase();
 | 
			
		||||
		} else {
 | 
			
		||||
			drug.pretty_name = drug.name.charAt(0).toUpperCase() + drug.name.slice(1);
 | 
			
		||||
		}
 | 
			
		||||
drug.pretty_name = drug.pretty_name.replace(/MEO/, 'MeO');
 | 
			
		||||
drug.pretty_name = drug.pretty_name.replace(/ACO/, 'AcO');
 | 
			
		||||
drug.pretty_name = drug.pretty_name.replace(/NBOME/, 'NBOMe');
 | 
			
		||||
drug.pretty_name = drug.pretty_name.replace(/MIPT/, 'MiPT');
 | 
			
		||||
drug.pretty_name = drug.pretty_name.replace(/DIPT/, 'DiPT');
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
			}
 | 
			
		||||
			if(drug) {
 | 
			
		||||
				callback(drug);
 | 
			
		||||
			} else {
 | 
			
		||||
				callback({'err': true, 'msg': 'No drug found.'});
 | 
			
		||||
			}
 | 
			
		||||
 | 
			
		||||
                }
 | 
			
		||||
            }.bind(this));
 | 
			
		||||
        },
 | 
			
		||||
 | 
			
		||||
        'getAllDrugNames': function(callback) {
 | 
			
		||||
            var names = [];
 | 
			
		||||
            this.db.scan('drugs', function(drug) {
 | 
			
		||||
		if(drug) {
 | 
			
		||||
                names.push(drug.name);
 | 
			
		||||
		}
 | 
			
		||||
            }, function() {
 | 
			
		||||
		    callback(names);
 | 
			
		||||
	    });
 | 
			
		||||
        },
 | 
			
		||||
 | 
			
		||||
        'getAllDrugNamesByCategory': function(category, callback) {
 | 
			
		||||
          this.api.getAllDrugs(function(names) {
 | 
			
		||||
            callback(_.pluck(_.filter(names, function(a) { return _.include(a.categories, category); }), 'name'));
 | 
			
		||||
          });
 | 
			
		||||
        },
 | 
			
		||||
 | 
			
		||||
	'getAllDrugs': function(callback) {
 | 
			
		||||
		this.api.getAllDrugNames(function(names) {
 | 
			
		||||
			var drugs = {};
 | 
			
		||||
			async.each(names, function(name, done) {
 | 
			
		||||
				if(!_.isUndefined(name)) {
 | 
			
		||||
				this.api.getDrug(name, function(drug) {
 | 
			
		||||
					drugs[name] = drug;
 | 
			
		||||
					done();
 | 
			
		||||
				});
 | 
			
		||||
				} else {
 | 
			
		||||
					done();
 | 
			
		||||
				}
 | 
			
		||||
			}.bind(this), function() {
 | 
			
		||||
				callback(drugs);
 | 
			
		||||
			});
 | 
			
		||||
		}.bind(this));
 | 
			
		||||
	},
 | 
			
		||||
        'getAllCategories': function(callback) {
 | 
			
		||||
          var categories = {};
 | 
			
		||||
          this.db.scan('drug_categories', function(cat) {
 | 
			
		||||
            categories[cat.name] = cat;
 | 
			
		||||
          }, function() {
 | 
			
		||||
            callback(categories);
 | 
			
		||||
          });
 | 
			
		||||
        },
 | 
			
		||||
 | 
			
		||||
'getAllDrugAliases': function(callback) {
 | 
			
		||||
		this.api.getAllDrugNames(function(names) {
 | 
			
		||||
			var fullNames = [];
 | 
			
		||||
			async.each(names, function(name, done) {
 | 
			
		||||
				if(!_.isUndefined(name)) {
 | 
			
		||||
				this.api.getDrug(name, function(drug) {
 | 
			
		||||
fullNames.push(name);
 | 
			
		||||
fullNames = _.union(fullNames, drug.aliases);
 | 
			
		||||
					done();
 | 
			
		||||
				});
 | 
			
		||||
				} else {
 | 
			
		||||
					done();
 | 
			
		||||
				}
 | 
			
		||||
			}.bind(this), function() {
 | 
			
		||||
				callback(fullNames);
 | 
			
		||||
			});
 | 
			
		||||
		}.bind(this));
 | 
			
		||||
	},
 | 
			
		||||
 | 
			
		||||
        'delDrug': function(name, callback) {
 | 
			
		||||
            this.db.del('drugs', name.toLowerCase(), function() {
 | 
			
		||||
                callback();
 | 
			
		||||
            });
 | 
			
		||||
        },
 | 
			
		||||
 | 
			
		||||
        'setDrugProperty': function(drug, property, content, callback) {
 | 
			
		||||
            drug.properties[property] = content;
 | 
			
		||||
            this.db.save('drugs', drug.name, drug, callback); 
 | 
			
		||||
        },
 | 
			
		||||
 | 
			
		||||
        'setCategoryProperty': function(category, property, content, callback) {
 | 
			
		||||
            category[property] = content;
 | 
			
		||||
            this.db.save('drug_categories', category.name, category, callback); 
 | 
			
		||||
        },
 | 
			
		||||
 | 
			
		||||
        'delDrugProperty': function(drug, property, callback) {
 | 
			
		||||
            delete drug.properties[property];
 | 
			
		||||
            this.db.save('drugs', drug.name, drug, callback); 
 | 
			
		||||
        },
 | 
			
		||||
 | 
			
		||||
        'createDrug': function(name, callback) {
 | 
			
		||||
            name = name.toLowerCase();
 | 
			
		||||
            this.db.create('drugs', name, {
 | 
			
		||||
                'name': name,
 | 
			
		||||
                'properties': {}
 | 
			
		||||
            }, callback);
 | 
			
		||||
        }
 | 
			
		||||
    };
 | 
			
		||||
 | 
			
		||||
    api['getDrug'].external = true;
 | 
			
		||||
    api['getDrug'].extMap = [ 'name', 'callback' ];
 | 
			
		||||
    api['getAllDrugNames'].external = true;
 | 
			
		||||
    api['getAllDrugNames'].extMap = [ 'callback' ];
 | 
			
		||||
    api['getAllDrugNamesByCategory'].external = true;
 | 
			
		||||
    api['getAllDrugNamesByCategory'].extMap = [ 'category', 'callback' ];
 | 
			
		||||
    api['getAllDrugAliases'].external = true;
 | 
			
		||||
    api['getAllDrugAliases'].extMap = [ 'callback' ];
 | 
			
		||||
    api['getAllDrugs'].external = true;
 | 
			
		||||
    api['getAllDrugs'].extMap = [ 'callback' ];
 | 
			
		||||
    api['getAllCategories'].external = true;
 | 
			
		||||
    api['getAllCategories'].extMap = [ 'callback' ];
 | 
			
		||||
    api['getInteraction'].external = true;
 | 
			
		||||
    api['getInteraction'].extMap = [ 'drugA', 'drugB', 'callback' ];
 | 
			
		||||
 | 
			
		||||
    return api;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
exports.fetch = function(dbot) {
 | 
			
		||||
    return api(dbot);
 | 
			
		||||
};
 | 
			
		||||
							
								
								
									
										755
									
								
								tripsit/combo.json
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										755
									
								
								tripsit/combo.json
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,755 @@
 | 
			
		||||
{
 | 
			
		||||
    "lsd": {
 | 
			
		||||
        "mushrooms": "Safe & Synergy",
 | 
			
		||||
        "dmt": "Safe & Synergy",
 | 
			
		||||
        "mescaline": "Safe & Synergy",
 | 
			
		||||
        "dox": "Safe & Synergy",
 | 
			
		||||
        "nbomes": "Safe & Synergy",
 | 
			
		||||
        "2c-x": "Safe & Synergy",
 | 
			
		||||
        "2c-t-x": "Safe & Synergy",
 | 
			
		||||
        "αmt": "Safe & Synergy",
 | 
			
		||||
        "5-meo-xxt": "Safe & Synergy",
 | 
			
		||||
        "cannabis": "Safe & Synergy",
 | 
			
		||||
        "ketamine": "Safe & Synergy",
 | 
			
		||||
        "mxe": "Safe & Synergy",
 | 
			
		||||
        "dxm": "Safe & Synergy",
 | 
			
		||||
        "pcp": "Safe & Synergy",
 | 
			
		||||
        "nitrous": "Safe & Synergy",
 | 
			
		||||
        "amphetamines": "Safe & No Synergy",
 | 
			
		||||
        "mdma": "Safe & Synergy",
 | 
			
		||||
        "cocaine": "Safe & No Synergy",
 | 
			
		||||
        "caffeine": "Safe & No Synergy",
 | 
			
		||||
        "alcohol": "Safe & No Synergy",
 | 
			
		||||
        "ghb/gbl": "Safe & No Synergy",
 | 
			
		||||
        "opioids": "Safe & No Synergy",
 | 
			
		||||
        "tramadol": "Safe & Decrease",
 | 
			
		||||
        "benzodiazepines": "Safe & Decrease",
 | 
			
		||||
        "maois": "Safe & Decrease",
 | 
			
		||||
        "ssris": "Safe & Decrease"
 | 
			
		||||
    },
 | 
			
		||||
    "mushrooms": {
 | 
			
		||||
        "lsd": "Safe & Synergy",
 | 
			
		||||
        "dmt": "Safe & Synergy",
 | 
			
		||||
        "mescaline": "Safe & Synergy",
 | 
			
		||||
        "dox": "Safe & Synergy",
 | 
			
		||||
        "nbomes": "Safe & Synergy",
 | 
			
		||||
        "2c-x": "Safe & Synergy",
 | 
			
		||||
        "2c-t-x": "Safe & Synergy",
 | 
			
		||||
        "αmt": "Safe & Synergy",
 | 
			
		||||
        "5-meo-xxt": "Safe & Synergy",
 | 
			
		||||
        "cannabis": "Safe & Synergy",
 | 
			
		||||
        "ketamine": "Safe & Synergy",
 | 
			
		||||
        "mxe": "Safe & Synergy",
 | 
			
		||||
        "dxm": "Safe & Synergy",
 | 
			
		||||
        "pcp": "Safe & Synergy",
 | 
			
		||||
        "nitrous": "Safe & Synergy",
 | 
			
		||||
        "amphetamines": "Safe & No Synergy",
 | 
			
		||||
        "mdma": "Safe & Synergy",
 | 
			
		||||
        "cocaine": "Safe & No Synergy",
 | 
			
		||||
        "caffeine": "Safe & No Synergy",
 | 
			
		||||
        "alcohol": "Safe & No Synergy",
 | 
			
		||||
        "ghb/gbl": "Safe & No Synergy",
 | 
			
		||||
        "opioids": "Safe & No Synergy",
 | 
			
		||||
        "tramadol": "Safe & Decrease",
 | 
			
		||||
        "benzodiazepines": "Safe & Decrease",
 | 
			
		||||
        "maois": "Safe & Synergy",
 | 
			
		||||
        "ssris": "Safe & Decrease"
 | 
			
		||||
    },
 | 
			
		||||
    "dmt": {
 | 
			
		||||
        "lsd": "Safe & Synergy",
 | 
			
		||||
        "mushrooms": "Safe & Synergy",
 | 
			
		||||
        "mescaline": "Safe & Synergy",
 | 
			
		||||
        "dox": "Safe & Synergy",
 | 
			
		||||
        "nbomes": "Safe & Synergy",
 | 
			
		||||
        "2c-x": "Safe & Synergy",
 | 
			
		||||
        "2c-t-x": "Safe & Synergy",
 | 
			
		||||
        "αmt": "Safe & Synergy",
 | 
			
		||||
        "5-meo-xxt": "Safe & Synergy",
 | 
			
		||||
        "cannabis": "Safe & Synergy",
 | 
			
		||||
        "ketamine": "Safe & Synergy",
 | 
			
		||||
        "mxe": "Safe & Synergy",
 | 
			
		||||
        "dxm": "Safe & Synergy",
 | 
			
		||||
        "pcp": "Safe & Synergy",
 | 
			
		||||
        "nitrous": "Safe & Synergy",
 | 
			
		||||
        "amphetamines": "Safe & No Synergy",
 | 
			
		||||
        "mdma": "Safe & Synergy",
 | 
			
		||||
        "cocaine": "Safe & No Synergy",
 | 
			
		||||
        "caffeine": "Safe & No Synergy",
 | 
			
		||||
        "alcohol": "Safe & Decrease",
 | 
			
		||||
        "ghb/gbl": "Safe & Decrease",
 | 
			
		||||
        "opioids": "Safe & No Synergy",
 | 
			
		||||
        "tramadol": "Safe & Decrease",
 | 
			
		||||
        "benzodiazepines": "Safe & Decrease",
 | 
			
		||||
        "maois": "Safe & Synergy",
 | 
			
		||||
        "ssris": "Safe & Decrease"
 | 
			
		||||
    },
 | 
			
		||||
    "mescaline": {
 | 
			
		||||
        "lsd": "Safe & Synergy",
 | 
			
		||||
        "mushrooms": "Safe & Synergy",
 | 
			
		||||
        "dmt": "Safe & Synergy",
 | 
			
		||||
        "dox": "Safe & Synergy",
 | 
			
		||||
        "nbomes": "Safe & Synergy",
 | 
			
		||||
        "2c-x": "Safe & Synergy",
 | 
			
		||||
        "2c-t-x": "Serotonin Syndrome",
 | 
			
		||||
        "αmt": "Serotonin Syndrome",
 | 
			
		||||
        "5-meo-xxt": "Unsafe",
 | 
			
		||||
        "cannabis": "Safe & Synergy",
 | 
			
		||||
        "ketamine": "Safe & Synergy",
 | 
			
		||||
        "mxe": "Safe & Synergy",
 | 
			
		||||
        "dxm": "Safe & Synergy",
 | 
			
		||||
        "pcp": "Safe & Synergy",
 | 
			
		||||
        "nitrous": "Safe & Synergy",
 | 
			
		||||
        "amphetamines": "Safe & No Synergy",
 | 
			
		||||
        "mdma": "Safe & Synergy",
 | 
			
		||||
        "cocaine": "Safe & No Synergy",
 | 
			
		||||
        "caffeine": "Safe & No Synergy",
 | 
			
		||||
        "alcohol": "Safe & No Synergy",
 | 
			
		||||
        "ghb/gbl": "Safe & No Synergy",
 | 
			
		||||
        "opioids": "Safe & No Synergy",
 | 
			
		||||
        "tramadol": "Deadly",
 | 
			
		||||
        "benzodiazepines": "Safe & Decrease",
 | 
			
		||||
        "maois": "Serotonin Syndrome",
 | 
			
		||||
        "ssris": "Safe & Decrease"
 | 
			
		||||
    },
 | 
			
		||||
    "dox": {
 | 
			
		||||
        "lsd": "Safe & Synergy",
 | 
			
		||||
        "mushrooms": "Safe & Synergy",
 | 
			
		||||
        "dmt": "Safe & Synergy",
 | 
			
		||||
        "mescaline": "Safe & Synergy",
 | 
			
		||||
        "nbomes": "Safe & Synergy",
 | 
			
		||||
        "2c-x": "Safe & Synergy",
 | 
			
		||||
        "2c-t-x": "Serotonin Syndrome",
 | 
			
		||||
        "αmt": "Serotonin Syndrome",
 | 
			
		||||
        "5-meo-xxt": "Unsafe",
 | 
			
		||||
        "cannabis": "Safe & Synergy",
 | 
			
		||||
        "ketamine": "Unsafe",
 | 
			
		||||
        "mxe": "Unsafe",
 | 
			
		||||
        "dxm": "Unsafe",
 | 
			
		||||
        "pcp": "Unsafe",
 | 
			
		||||
        "nitrous": "Safe & Synergy",
 | 
			
		||||
        "amphetamines": "Unsafe",
 | 
			
		||||
        "mdma": "Unsafe",
 | 
			
		||||
        "cocaine": "Unsafe",
 | 
			
		||||
        "caffeine": "Unsafe",
 | 
			
		||||
        "alcohol": "Unsafe",
 | 
			
		||||
        "ghb/gbl": "Unsafe",
 | 
			
		||||
        "opioids": "Unsafe",
 | 
			
		||||
        "tramadol": "Deadly",
 | 
			
		||||
        "benzodiazepines": "Safe & Decrease",
 | 
			
		||||
        "maois": "Serotonin Syndrome",
 | 
			
		||||
        "ssris": "Safe & Decrease"
 | 
			
		||||
    },
 | 
			
		||||
    "nbomes": {
 | 
			
		||||
        "lsd": "Safe & Synergy",
 | 
			
		||||
        "mushrooms": "Safe & Synergy",
 | 
			
		||||
        "dmt": "Safe & Synergy",
 | 
			
		||||
        "mescaline": "Safe & Synergy",
 | 
			
		||||
        "dox": "Safe & Synergy",
 | 
			
		||||
        "2c-x": "Safe & Synergy",
 | 
			
		||||
        "2c-t-x": "Serotonin Syndrome",
 | 
			
		||||
        "αmt": "Serotonin Syndrome",
 | 
			
		||||
        "5-meo-xxt": "Unsafe",
 | 
			
		||||
        "cannabis": "Safe & Synergy",
 | 
			
		||||
        "ketamine": "Safe & Synergy",
 | 
			
		||||
        "mxe": "Safe & Synergy",
 | 
			
		||||
        "dxm": "Safe & Synergy",
 | 
			
		||||
        "pcp": "Safe & Synergy",
 | 
			
		||||
        "nitrous": "Safe & Synergy",
 | 
			
		||||
        "amphetamines": "Unsafe",
 | 
			
		||||
        "mdma": "Safe & Synergy",
 | 
			
		||||
        "cocaine": "Unsafe",
 | 
			
		||||
        "caffeine": "Unsafe",
 | 
			
		||||
        "alcohol": "Safe & No Synergy",
 | 
			
		||||
        "ghb/gbl": "Safe & No Synergy",
 | 
			
		||||
        "opioids": "Safe & No Synergy",
 | 
			
		||||
        "tramadol": "Deadly",
 | 
			
		||||
        "benzodiazepines": "Safe & Decrease",
 | 
			
		||||
        "maois": "Serotonin Syndrome",
 | 
			
		||||
        "ssris": "Safe & Decrease"
 | 
			
		||||
    },
 | 
			
		||||
    "2c-x": {
 | 
			
		||||
        "lsd": "Safe & Synergy",
 | 
			
		||||
        "mushrooms": "Safe & Synergy",
 | 
			
		||||
        "dmt": "Safe & Synergy",
 | 
			
		||||
        "mescaline": "Safe & Synergy",
 | 
			
		||||
        "dox": "Safe & Synergy",
 | 
			
		||||
        "nbomes": "Safe & Synergy",
 | 
			
		||||
        "2c-t-x": "Serotonin Syndrome",
 | 
			
		||||
        "αmt": "Serotonin Syndrome",
 | 
			
		||||
        "5-meo-xxt": "Unsafe",
 | 
			
		||||
        "cannabis": "Safe & Synergy",
 | 
			
		||||
        "ketamine": "Safe & Synergy",
 | 
			
		||||
        "mxe": "Safe & Synergy",
 | 
			
		||||
        "dxm": "Safe & Synergy",
 | 
			
		||||
        "pcp": "Safe & Synergy",
 | 
			
		||||
        "nitrous": "Safe & Synergy",
 | 
			
		||||
        "amphetamines": "Unsafe",
 | 
			
		||||
        "mdma": "Safe & Synergy",
 | 
			
		||||
        "cocaine": "Unsafe",
 | 
			
		||||
        "caffeine": "Unsafe",
 | 
			
		||||
        "alcohol": "Safe & No Synergy",
 | 
			
		||||
        "ghb/gbl": "Safe & No Synergy",
 | 
			
		||||
        "opioids": "Safe & No Synergy",
 | 
			
		||||
        "tramadol": "Deadly",
 | 
			
		||||
        "benzodiazepines": "Safe & Decrease",
 | 
			
		||||
        "maois": "Serotonin Syndrome",
 | 
			
		||||
        "ssris": "Safe & Decrease"
 | 
			
		||||
    },
 | 
			
		||||
    "2c-t-x": {
 | 
			
		||||
        "lsd": "Safe & Synergy",
 | 
			
		||||
        "mushrooms": "Safe & Synergy",
 | 
			
		||||
        "dmt": "Safe & Synergy",
 | 
			
		||||
        "mescaline": "Serotonin Syndrome",
 | 
			
		||||
        "dox": "Serotonin Syndrome",
 | 
			
		||||
        "nbomes": "Serotonin Syndrome",
 | 
			
		||||
        "2c-x": "Serotonin Syndrome",
 | 
			
		||||
        "αmt": "Serotonin Syndrome",
 | 
			
		||||
        "5-meo-xxt": "Serotonin Syndrome",
 | 
			
		||||
        "cannabis": "Safe & Synergy",
 | 
			
		||||
        "ketamine": "Safe & Synergy",
 | 
			
		||||
        "mxe": "Serotonin Syndrome",
 | 
			
		||||
        "dxm": "Serotonin Syndrome",
 | 
			
		||||
        "pcp": "Serotonin Syndrome",
 | 
			
		||||
        "nitrous": "Safe & Synergy",
 | 
			
		||||
        "amphetamines": "Serotonin Syndrome",
 | 
			
		||||
        "mdma": "Serotonin Syndrome",
 | 
			
		||||
        "cocaine": "Serotonin Syndrome",
 | 
			
		||||
        "caffeine": "Unsafe",
 | 
			
		||||
        "alcohol": "Unsafe",
 | 
			
		||||
        "ghb/gbl": "Safe & No Synergy",
 | 
			
		||||
        "opioids": "Unsafe",
 | 
			
		||||
        "tramadol": "Serotonin Syndrome",
 | 
			
		||||
        "benzodiazepines": "Safe & Decrease",
 | 
			
		||||
        "maois": "Serotonin Syndrome",
 | 
			
		||||
        "ssris": "Serotonin Syndrome"
 | 
			
		||||
    },
 | 
			
		||||
    "αmt": {
 | 
			
		||||
        "lsd": "Safe & Synergy",
 | 
			
		||||
        "mushrooms": "Safe & Synergy",
 | 
			
		||||
        "dmt": "Safe & Synergy",
 | 
			
		||||
        "mescaline": "Serotonin Syndrome",
 | 
			
		||||
        "dox": "Serotonin Syndrome",
 | 
			
		||||
        "nbomes": "Serotonin Syndrome",
 | 
			
		||||
        "2c-x": "Serotonin Syndrome",
 | 
			
		||||
        "2c-t-x": "Serotonin Syndrome",
 | 
			
		||||
        "5-meo-xxt": "Serotonin Syndrome",
 | 
			
		||||
        "cannabis": "Safe & Synergy",
 | 
			
		||||
        "ketamine": "Safe & Synergy",
 | 
			
		||||
        "mxe": "Serotonin Syndrome",
 | 
			
		||||
        "dxm": "Serotonin Syndrome",
 | 
			
		||||
        "pcp": "Serotonin Syndrome",
 | 
			
		||||
        "nitrous": "Safe & Synergy",
 | 
			
		||||
        "amphetamines": "Serotonin Syndrome",
 | 
			
		||||
        "mdma": "Serotonin Syndrome",
 | 
			
		||||
        "cocaine": "Serotonin Syndrome",
 | 
			
		||||
        "caffeine": "Unsafe",
 | 
			
		||||
        "alcohol": "Unsafe",
 | 
			
		||||
        "ghb/gbl": "Safe & No Synergy",
 | 
			
		||||
        "opioids": "Unsafe",
 | 
			
		||||
        "tramadol": "Serotonin Syndrome",
 | 
			
		||||
        "benzodiazepines": "Safe & Decrease",
 | 
			
		||||
        "maois": "Serotonin Syndrome",
 | 
			
		||||
        "ssris": "Serotonin Syndrome"
 | 
			
		||||
    },
 | 
			
		||||
    "5-meo-xxt": {
 | 
			
		||||
        "lsd": "Safe & Synergy",
 | 
			
		||||
        "mushrooms": "Safe & Synergy",
 | 
			
		||||
        "dmt": "Safe & Synergy",
 | 
			
		||||
        "mescaline": "Unsafe",
 | 
			
		||||
        "dox": "Unsafe",
 | 
			
		||||
        "nbomes": "Unsafe",
 | 
			
		||||
        "2c-x": "Unsafe",
 | 
			
		||||
        "2c-t-x": "Serotonin Syndrome",
 | 
			
		||||
        "αmt": "Serotonin Syndrome",
 | 
			
		||||
        "cannabis": "Safe & Synergy",
 | 
			
		||||
        "ketamine": "Safe & Synergy",
 | 
			
		||||
        "nitrous": "Safe & Synergy",
 | 
			
		||||
        "amphetamines": "Unsafe",
 | 
			
		||||
        "mdma": "Unsafe",
 | 
			
		||||
        "cocaine": "Unsafe",
 | 
			
		||||
        "caffeine": "Unsafe",
 | 
			
		||||
        "alcohol": "Safe & No Synergy",
 | 
			
		||||
        "ghb/gbl": "Safe & No Synergy",
 | 
			
		||||
        "opioids": "Safe & No Synergy",
 | 
			
		||||
        "tramadol": "Serotonin Syndrome",
 | 
			
		||||
        "benzodiazepines": "Safe & Decrease",
 | 
			
		||||
        "maois": "Serotonin Syndrome",
 | 
			
		||||
        "ssris": "Serotonin Syndrome"
 | 
			
		||||
    },
 | 
			
		||||
    "cannabis": {
 | 
			
		||||
        "lsd": "Safe & Synergy",
 | 
			
		||||
        "mushrooms": "Safe & Synergy",
 | 
			
		||||
        "dmt": "Safe & Synergy",
 | 
			
		||||
        "mescaline": "Safe & Synergy",
 | 
			
		||||
        "dox": "Safe & Synergy",
 | 
			
		||||
        "nbomes": "Safe & Synergy",
 | 
			
		||||
        "2c-x": "Safe & Synergy",
 | 
			
		||||
        "2c-t-x": "Safe & Synergy",
 | 
			
		||||
        "αmt": "Safe & Synergy",
 | 
			
		||||
        "5-meo-xxt": "Safe & Synergy",
 | 
			
		||||
        "ketamine": "Safe & Synergy",
 | 
			
		||||
        "mxe": "Safe & Synergy",
 | 
			
		||||
        "dxm": "Safe & Synergy",
 | 
			
		||||
        "pcp": "Safe & Synergy",
 | 
			
		||||
        "nitrous": "Safe & Synergy",
 | 
			
		||||
        "amphetamines": "Safe & No Synergy",
 | 
			
		||||
        "mdma": "Safe & Synergy",
 | 
			
		||||
        "cocaine": "Safe & No Synergy",
 | 
			
		||||
        "caffeine": "Safe & No Synergy",
 | 
			
		||||
        "alcohol": "Safe & No Synergy",
 | 
			
		||||
        "ghb/gbl": "Safe & Synergy",
 | 
			
		||||
        "opioids": "Safe & Synergy",
 | 
			
		||||
        "tramadol": "Safe & Synergy",
 | 
			
		||||
        "benzodiazepines": "Safe & Decrease",
 | 
			
		||||
        "maois": "Safe & Synergy",
 | 
			
		||||
        "ssris": "Safe & No Synergy"
 | 
			
		||||
    },
 | 
			
		||||
    "ketamine": {
 | 
			
		||||
        "lsd": "Safe & Synergy",
 | 
			
		||||
        "mushrooms": "Safe & Synergy",
 | 
			
		||||
        "dmt": "Safe & Synergy",
 | 
			
		||||
        "mescaline": "Safe & Synergy",
 | 
			
		||||
        "dox": "Unsafe",
 | 
			
		||||
        "nbomes": "Safe & Synergy",
 | 
			
		||||
        "2c-x": "Safe & Synergy",
 | 
			
		||||
        "2c-t-x": "Safe & Synergy",
 | 
			
		||||
        "αmt": "Safe & Synergy",
 | 
			
		||||
        "5-meo-xxt": "Safe & Synergy",
 | 
			
		||||
        "cannabis": "Safe & Synergy",
 | 
			
		||||
        "mxe": "Safe & Synergy",
 | 
			
		||||
        "dxm": "Safe & No Synergy",
 | 
			
		||||
        "pcp": "Safe & Synergy",
 | 
			
		||||
        "nitrous": "Safe & Synergy",
 | 
			
		||||
        "amphetamines": "Unsafe",
 | 
			
		||||
        "mdma": "Safe & Synergy",
 | 
			
		||||
        "cocaine": "Unsafe",
 | 
			
		||||
        "caffeine": "Unsafe",
 | 
			
		||||
        "alcohol": "Deadly",
 | 
			
		||||
        "ghb/gbl": "Deadly",
 | 
			
		||||
        "opioids": "Deadly",
 | 
			
		||||
        "tramadol": "Deadly",
 | 
			
		||||
        "benzodiazepines": "Unsafe",
 | 
			
		||||
        "maois": "Safe & No Synergy",
 | 
			
		||||
        "ssris": "Safe & No Synergy"
 | 
			
		||||
    },
 | 
			
		||||
    "mxe": {
 | 
			
		||||
        "lsd": "Safe & Synergy",
 | 
			
		||||
        "mushrooms": "Safe & Synergy",
 | 
			
		||||
        "dmt": "Safe & Synergy",
 | 
			
		||||
        "mescaline": "Safe & Synergy",
 | 
			
		||||
        "dox": "Unsafe",
 | 
			
		||||
        "nbomes": "Safe & Synergy",
 | 
			
		||||
        "2c-x": "Safe & Synergy",
 | 
			
		||||
        "2c-t-x": "Serotonin Syndrome",
 | 
			
		||||
        "αmt": "Serotonin Syndrome",
 | 
			
		||||
        "5-meo-xxt": "Serotonin Syndrome",
 | 
			
		||||
        "cannabis": "Safe & Synergy",
 | 
			
		||||
        "ketamine": "Safe & Synergy",
 | 
			
		||||
        "dxm": "Serotonin Syndrome",
 | 
			
		||||
        "pcp": "Serotonin Syndrome",
 | 
			
		||||
        "nitrous": "Safe & Synergy",
 | 
			
		||||
        "amphetamines": "Unsafe",
 | 
			
		||||
        "mdma": "Unsafe",
 | 
			
		||||
        "cocaine": "Unsafe",
 | 
			
		||||
        "caffeine": "Unsafe",
 | 
			
		||||
        "alcohol": "Deadly",
 | 
			
		||||
        "ghb/gbl": "Deadly",
 | 
			
		||||
        "opioids": "Deadly",
 | 
			
		||||
        "tramadol": "Serotonin Syndrome",
 | 
			
		||||
        "benzodiazepines": "Unsafe",
 | 
			
		||||
        "maois": "Serotonin Syndrome",
 | 
			
		||||
        "ssris": "Unsafe"
 | 
			
		||||
    },
 | 
			
		||||
    "dxm": {
 | 
			
		||||
        "lsd": "Safe & Synergy",
 | 
			
		||||
        "mushrooms": "Safe & Synergy",
 | 
			
		||||
        "dmt": "Safe & Synergy",
 | 
			
		||||
        "mescaline": "Safe & Synergy",
 | 
			
		||||
        "dox": "Unsafe",
 | 
			
		||||
        "nbomes": "Safe & Synergy",
 | 
			
		||||
        "2c-x": "Safe & Synergy",
 | 
			
		||||
        "2c-t-x": "Serotonin Syndrome",
 | 
			
		||||
        "αmt": "Serotonin Syndrome",
 | 
			
		||||
        "5-meo-xxt": "Serotonin Syndrome",
 | 
			
		||||
        "cannabis": "Safe & Synergy",
 | 
			
		||||
        "ketamine": "Safe & No Synergy",
 | 
			
		||||
        "mxe": "Serotonin Syndrome",
 | 
			
		||||
        "pcp": "Serotonin Syndrome",
 | 
			
		||||
        "nitrous": "Safe & Synergy",
 | 
			
		||||
        "amphetamines": "Unsafe",
 | 
			
		||||
        "mdma": "Serotonin Syndrome",
 | 
			
		||||
        "cocaine": "Unsafe",
 | 
			
		||||
        "caffeine": "Unsafe",
 | 
			
		||||
        "alcohol": "Deadly",
 | 
			
		||||
        "ghb/gbl": "Deadly",
 | 
			
		||||
        "opioids": "Deadly",
 | 
			
		||||
        "tramadol": "Serotonin Syndrome",
 | 
			
		||||
        "benzodiazepines": "Unsafe",
 | 
			
		||||
        "maois": "Serotonin Syndrome",
 | 
			
		||||
        "ssris": "Serotonin Syndrome"
 | 
			
		||||
    },
 | 
			
		||||
    "pcp": {
 | 
			
		||||
        "lsd": "Safe & Synergy",
 | 
			
		||||
        "mushrooms": "Safe & Synergy",
 | 
			
		||||
        "dmt": "Safe & Synergy",
 | 
			
		||||
        "mescaline": "Safe & Synergy",
 | 
			
		||||
        "dox": "Unsafe",
 | 
			
		||||
        "nbomes": "Safe & Synergy",
 | 
			
		||||
        "2c-x": "Safe & Synergy",
 | 
			
		||||
        "2c-t-x": "Serotonin Syndrome",
 | 
			
		||||
        "αmt": "Serotonin Syndrome",
 | 
			
		||||
        "5-meo-xxt": "Serotonin Syndrome",
 | 
			
		||||
        "cannabis": "Safe & Synergy",
 | 
			
		||||
        "ketamine": "Safe & Synergy",
 | 
			
		||||
        "mxe": "Serotonin Syndrome",
 | 
			
		||||
        "dxm": "Serotonin Syndrome",
 | 
			
		||||
        "nitrous": "Safe & Synergy",
 | 
			
		||||
        "amphetamines": "Unsafe",
 | 
			
		||||
        "mdma": "Unsafe",
 | 
			
		||||
        "cocaine": "Unsafe",
 | 
			
		||||
        "caffeine": "Unsafe",
 | 
			
		||||
        "alcohol": "Deadly",
 | 
			
		||||
        "ghb/gbl": "Deadly",
 | 
			
		||||
        "opioids": "Deadly",
 | 
			
		||||
        "tramadol": "Serotonin Syndrome",
 | 
			
		||||
        "benzodiazepines": "Unsafe",
 | 
			
		||||
        "maois": "Serotonin Syndrome",
 | 
			
		||||
        "ssris": "Unsafe"
 | 
			
		||||
    },
 | 
			
		||||
    "nitrous": {
 | 
			
		||||
        "lsd": "Safe & Synergy",
 | 
			
		||||
        "mushrooms": "Safe & Synergy",
 | 
			
		||||
        "dmt": "Safe & Synergy",
 | 
			
		||||
        "mescaline": "Safe & Synergy",
 | 
			
		||||
        "dox": "Safe & Synergy",
 | 
			
		||||
        "nbomes": "Safe & Synergy",
 | 
			
		||||
        "2c-x": "Safe & Synergy",
 | 
			
		||||
        "2c-t-x": "Safe & Synergy",
 | 
			
		||||
        "αmt": "Safe & Synergy",
 | 
			
		||||
        "5-meo-xxt": "Safe & Synergy",
 | 
			
		||||
        "cannabis": "Safe & Synergy",
 | 
			
		||||
        "ketamine": "Safe & Synergy",
 | 
			
		||||
        "mxe": "Safe & Synergy",
 | 
			
		||||
        "dxm": "Safe & Synergy",
 | 
			
		||||
        "pcp": "Safe & Synergy",
 | 
			
		||||
        "amphetamines": "Safe & Synergy",
 | 
			
		||||
        "mdma": "Safe & Synergy",
 | 
			
		||||
        "cocaine": "Safe & Synergy",
 | 
			
		||||
        "caffeine": "Safe & No Synergy",
 | 
			
		||||
        "alcohol": "Unsafe",
 | 
			
		||||
        "ghb/gbl": "Unsafe",
 | 
			
		||||
        "opioids": "Safe & Decrease",
 | 
			
		||||
        "tramadol": "Safe & Decrease",
 | 
			
		||||
        "benzodiazepines": "Safe & Decrease",
 | 
			
		||||
        "maois": "Safe & No Synergy",
 | 
			
		||||
        "ssris": "Safe & No Synergy"
 | 
			
		||||
    },
 | 
			
		||||
    "amphetamines": {
 | 
			
		||||
        "lsd": "Safe & No Synergy",
 | 
			
		||||
        "mushrooms": "Safe & No Synergy",
 | 
			
		||||
        "dmt": "Safe & No Synergy",
 | 
			
		||||
        "mescaline": "Safe & No Synergy",
 | 
			
		||||
        "dox": "Unsafe",
 | 
			
		||||
        "nbomes": "Unsafe",
 | 
			
		||||
        "2c-x": "Unsafe",
 | 
			
		||||
        "2c-t-x": "Serotonin Syndrome",
 | 
			
		||||
        "αmt": "Serotonin Syndrome",
 | 
			
		||||
        "5-meo-xxt": "Unsafe",
 | 
			
		||||
        "cannabis": "Safe & No Synergy",
 | 
			
		||||
        "ketamine": "Unsafe",
 | 
			
		||||
        "mxe": "Unsafe",
 | 
			
		||||
        "dxm": "Unsafe",
 | 
			
		||||
        "pcp": "Unsafe",
 | 
			
		||||
        "nitrous": "Safe & Synergy",
 | 
			
		||||
        "mdma": "Unsafe",
 | 
			
		||||
        "cocaine": "Unsafe",
 | 
			
		||||
        "caffeine": "Unsafe",
 | 
			
		||||
        "alcohol": "Unsafe",
 | 
			
		||||
        "ghb/gbl": "Unsafe",
 | 
			
		||||
        "opioids": "Unsafe",
 | 
			
		||||
        "tramadol": "Deadly",
 | 
			
		||||
        "benzodiazepines": "Safe & Decrease",
 | 
			
		||||
        "maois": "Serotonin Syndrome",
 | 
			
		||||
        "ssris": "Safe & No Synergy"
 | 
			
		||||
    },
 | 
			
		||||
    "mdma": {
 | 
			
		||||
        "lsd": "Safe & Synergy",
 | 
			
		||||
        "mushrooms": "Safe & Synergy",
 | 
			
		||||
        "dmt": "Safe & Synergy",
 | 
			
		||||
        "mescaline": "Safe & Synergy",
 | 
			
		||||
        "dox": "Unsafe",
 | 
			
		||||
        "nbomes": "Safe & Synergy",
 | 
			
		||||
        "2c-x": "Safe & Synergy",
 | 
			
		||||
        "2c-t-x": "Serotonin Syndrome",
 | 
			
		||||
        "αmt": "Serotonin Syndrome",
 | 
			
		||||
        "5-meo-xxt": "Unsafe",
 | 
			
		||||
        "cannabis": "Safe & Synergy",
 | 
			
		||||
        "ketamine": "Safe & Synergy",
 | 
			
		||||
        "mxe": "Unsafe",
 | 
			
		||||
        "dxm": "Serotonin Syndrome",
 | 
			
		||||
        "pcp": "Unsafe",
 | 
			
		||||
        "nitrous": "Safe & Synergy",
 | 
			
		||||
        "amphetamines": "Unsafe",
 | 
			
		||||
        "cocaine": "Unsafe",
 | 
			
		||||
        "caffeine": "Unsafe",
 | 
			
		||||
        "alcohol": "Unsafe",
 | 
			
		||||
        "ghb/gbl": "Safe & Synergy",
 | 
			
		||||
        "opioids": "Unsafe",
 | 
			
		||||
        "tramadol": "Deadly",
 | 
			
		||||
        "benzodiazepines": "Safe & Decrease",
 | 
			
		||||
        "maois": "Serotonin Syndrome",
 | 
			
		||||
        "ssris": "Safe & Decrease"
 | 
			
		||||
    },
 | 
			
		||||
    "cocaine": {
 | 
			
		||||
        "lsd": "Safe & No Synergy",
 | 
			
		||||
        "mushrooms": "Safe & No Synergy",
 | 
			
		||||
        "dmt": "Safe & No Synergy",
 | 
			
		||||
        "mescaline": "Safe & No Synergy",
 | 
			
		||||
        "dox": "Unsafe",
 | 
			
		||||
        "nbomes": "Unsafe",
 | 
			
		||||
        "2c-x": "Unsafe",
 | 
			
		||||
        "2c-t-x": "Serotonin Syndrome",
 | 
			
		||||
        "αmt": "Serotonin Syndrome",
 | 
			
		||||
        "5-meo-xxt": "Unsafe",
 | 
			
		||||
        "cannabis": "Safe & No Synergy",
 | 
			
		||||
        "ketamine": "Unsafe",
 | 
			
		||||
        "mxe": "Unsafe",
 | 
			
		||||
        "dxm": "Unsafe",
 | 
			
		||||
        "pcp": "Unsafe",
 | 
			
		||||
        "nitrous": "Safe & Synergy",
 | 
			
		||||
        "amphetamines": "Unsafe",
 | 
			
		||||
        "mdma": "Unsafe",
 | 
			
		||||
        "caffeine": "Unsafe",
 | 
			
		||||
        "alcohol": "Unsafe",
 | 
			
		||||
        "ghb/gbl": "Unsafe",
 | 
			
		||||
        "opioids": "Deadly",
 | 
			
		||||
        "tramadol": "Deadly",
 | 
			
		||||
        "benzodiazepines": "Safe & Decrease",
 | 
			
		||||
        "maois": "Serotonin Syndrome",
 | 
			
		||||
        "ssris": "Unsafe"
 | 
			
		||||
    },
 | 
			
		||||
    "caffeine": {
 | 
			
		||||
        "lsd": "Safe & No Synergy",
 | 
			
		||||
        "mushrooms": "Safe & No Synergy",
 | 
			
		||||
        "dmt": "Safe & No Synergy",
 | 
			
		||||
        "mescaline": "Safe & No Synergy",
 | 
			
		||||
        "dox": "Unsafe",
 | 
			
		||||
        "nbomes": "Unsafe",
 | 
			
		||||
        "2c-x": "Unsafe",
 | 
			
		||||
        "2c-t-x": "Unsafe",
 | 
			
		||||
        "αmt": "Unsafe",
 | 
			
		||||
        "5-meo-xxt": "Unsafe",
 | 
			
		||||
        "cannabis": "Safe & No Synergy",
 | 
			
		||||
        "ketamine": "Unsafe",
 | 
			
		||||
        "mxe": "Unsafe",
 | 
			
		||||
        "dxm": "Unsafe",
 | 
			
		||||
        "pcp": "Unsafe",
 | 
			
		||||
        "nitrous": "Safe & No Synergy",
 | 
			
		||||
        "amphetamines": "Unsafe",
 | 
			
		||||
        "mdma": "Unsafe",
 | 
			
		||||
        "cocaine": "Unsafe",
 | 
			
		||||
        "alcohol": "Safe & No Synergy",
 | 
			
		||||
        "ghb/gbl": "Safe & No Synergy",
 | 
			
		||||
        "opioids": "Safe & No Synergy",
 | 
			
		||||
        "tramadol": "Safe & Synergy",
 | 
			
		||||
        "benzodiazepines": "Safe & Decrease",
 | 
			
		||||
        "maois": "Safe & No Synergy",
 | 
			
		||||
        "ssris": "Safe & No Synergy"
 | 
			
		||||
    },
 | 
			
		||||
    "alcohol": {
 | 
			
		||||
        "lsd": "Safe & No Synergy",
 | 
			
		||||
        "mushrooms": "Safe & No Synergy",
 | 
			
		||||
        "dmt": "Safe & Decrease",
 | 
			
		||||
        "mescaline": "Safe & No Synergy",
 | 
			
		||||
        "dox": "Unsafe",
 | 
			
		||||
        "nbomes": "Safe & No Synergy",
 | 
			
		||||
        "2c-x": "Safe & No Synergy",
 | 
			
		||||
        "2c-t-x": "Unsafe",
 | 
			
		||||
        "αmt": "Unsafe",
 | 
			
		||||
        "5-meo-xxt": "Safe & No Synergy",
 | 
			
		||||
        "cannabis": "Safe & No Synergy",
 | 
			
		||||
        "ketamine": "Deadly",
 | 
			
		||||
        "mxe": "Deadly",
 | 
			
		||||
        "dxm": "Deadly",
 | 
			
		||||
        "pcp": "Deadly",
 | 
			
		||||
        "nitrous": "Unsafe",
 | 
			
		||||
        "amphetamines": "Unsafe",
 | 
			
		||||
        "mdma": "Unsafe",
 | 
			
		||||
        "cocaine": "Unsafe",
 | 
			
		||||
        "caffeine": "Safe & No Synergy",
 | 
			
		||||
        "ghb/gbl": "Deadly",
 | 
			
		||||
        "opioids": "Deadly",
 | 
			
		||||
        "tramadol": "Deadly",
 | 
			
		||||
        "benzodiazepines": "Deadly",
 | 
			
		||||
        "maois": "Unsafe",
 | 
			
		||||
        "ssris": "Unsafe"
 | 
			
		||||
    },
 | 
			
		||||
    "ghb/gbl": {
 | 
			
		||||
        "lsd": "Safe & No Synergy",
 | 
			
		||||
        "mushrooms": "Safe & No Synergy",
 | 
			
		||||
        "dmt": "Safe & Decrease",
 | 
			
		||||
        "mescaline": "Safe & No Synergy",
 | 
			
		||||
        "dox": "Unsafe",
 | 
			
		||||
        "nbomes": "Safe & No Synergy",
 | 
			
		||||
        "2c-x": "Safe & No Synergy",
 | 
			
		||||
        "2c-t-x": "Safe & No Synergy",
 | 
			
		||||
        "αmt": "Safe & No Synergy",
 | 
			
		||||
        "5-meo-xxt": "Safe & No Synergy",
 | 
			
		||||
        "cannabis": "Safe & Synergy",
 | 
			
		||||
        "ketamine": "Deadly",
 | 
			
		||||
        "mxe": "Deadly",
 | 
			
		||||
        "dxm": "Deadly",
 | 
			
		||||
        "pcp": "Deadly",
 | 
			
		||||
        "nitrous": "Unsafe",
 | 
			
		||||
        "amphetamines": "Unsafe",
 | 
			
		||||
        "mdma": "Safe & Synergy",
 | 
			
		||||
        "cocaine": "Unsafe",
 | 
			
		||||
        "caffeine": "Safe & No Synergy",
 | 
			
		||||
        "alcohol": "Deadly",
 | 
			
		||||
        "opioids": "Deadly",
 | 
			
		||||
        "tramadol": "Deadly",
 | 
			
		||||
        "benzodiazepines": "Deadly",
 | 
			
		||||
        "maois": "Safe & Synergy",
 | 
			
		||||
        "ssris": "Safe & No Synergy"
 | 
			
		||||
    },
 | 
			
		||||
    "opioids": {
 | 
			
		||||
        "lsd": "Safe & No Synergy",
 | 
			
		||||
        "mushrooms": "Safe & No Synergy",
 | 
			
		||||
        "dmt": "Safe & No Synergy",
 | 
			
		||||
        "mescaline": "Safe & No Synergy",
 | 
			
		||||
        "dox": "Unsafe",
 | 
			
		||||
        "nbomes": "Safe & No Synergy",
 | 
			
		||||
        "2c-x": "Safe & No Synergy",
 | 
			
		||||
        "2c-t-x": "Unsafe",
 | 
			
		||||
        "αmt": "Unsafe",
 | 
			
		||||
        "5-meo-xxt": "Safe & No Synergy",
 | 
			
		||||
        "cannabis": "Safe & Synergy",
 | 
			
		||||
        "ketamine": "Deadly",
 | 
			
		||||
        "mxe": "Deadly",
 | 
			
		||||
        "dxm": "Deadly",
 | 
			
		||||
        "pcp": "Deadly",
 | 
			
		||||
        "nitrous": "Safe & Decrease",
 | 
			
		||||
        "amphetamines": "Unsafe",
 | 
			
		||||
        "mdma": "Unsafe",
 | 
			
		||||
        "cocaine": "Deadly",
 | 
			
		||||
        "caffeine": "Safe & No Synergy",
 | 
			
		||||
        "alcohol": "Deadly",
 | 
			
		||||
        "ghb/gbl": "Deadly",
 | 
			
		||||
        "tramadol": "Deadly",
 | 
			
		||||
        "benzodiazepines": "Deadly",
 | 
			
		||||
        "maois": "Unsafe",
 | 
			
		||||
        "ssris": "Serotonin Syndrome"
 | 
			
		||||
    },
 | 
			
		||||
    "tramadol": {
 | 
			
		||||
        "lsd": "Safe & Decrease",
 | 
			
		||||
        "mushrooms": "Safe & Decrease",
 | 
			
		||||
        "dmt": "Safe & Decrease",
 | 
			
		||||
        "mescaline": "Deadly",
 | 
			
		||||
        "dox": "Deadly",
 | 
			
		||||
        "nbomes": "Deadly",
 | 
			
		||||
        "2c-x": "Deadly",
 | 
			
		||||
        "2c-t-x": "Serotonin Syndrome",
 | 
			
		||||
        "αmt": "Serotonin Syndrome",
 | 
			
		||||
        "5-meo-xxt": "Serotonin Syndrome",
 | 
			
		||||
        "cannabis": "Safe & Synergy",
 | 
			
		||||
        "ketamine": "Deadly",
 | 
			
		||||
        "mxe": "Serotonin Syndrome",
 | 
			
		||||
        "dxm": "Serotonin Syndrome",
 | 
			
		||||
        "pcp": "Serotonin Syndrome",
 | 
			
		||||
        "nitrous": "Safe & Decrease",
 | 
			
		||||
        "amphetamines": "Deadly",
 | 
			
		||||
        "mdma": "Deadly",
 | 
			
		||||
        "cocaine": "Deadly",
 | 
			
		||||
        "caffeine": "Safe & Synergy",
 | 
			
		||||
        "alcohol": "Deadly",
 | 
			
		||||
        "ghb/gbl": "Deadly",
 | 
			
		||||
        "opioids": "Deadly",
 | 
			
		||||
        "benzodiazepines": "Deadly",
 | 
			
		||||
        "maois": "Serotonin Syndrome",
 | 
			
		||||
        "ssris": "Serotonin Syndrome"
 | 
			
		||||
    },
 | 
			
		||||
    "benzodiazepines": {
 | 
			
		||||
        "lsd": "Safe & Decrease",
 | 
			
		||||
        "mushrooms": "Safe & Decrease",
 | 
			
		||||
        "dmt": "Safe & Decrease",
 | 
			
		||||
        "mescaline": "Safe & Decrease",
 | 
			
		||||
        "dox": "Safe & Decrease",
 | 
			
		||||
        "nbomes": "Safe & Decrease",
 | 
			
		||||
        "2c-x": "Safe & Decrease",
 | 
			
		||||
        "2c-t-x": "Safe & Decrease",
 | 
			
		||||
        "αmt": "Safe & Decrease",
 | 
			
		||||
        "5-meo-xxt": "Safe & Decrease",
 | 
			
		||||
        "cannabis": "Safe & Decrease",
 | 
			
		||||
        "ketamine": "Unsafe",
 | 
			
		||||
        "mxe": "Unsafe",
 | 
			
		||||
        "dxm": "Unsafe",
 | 
			
		||||
        "pcp": "Unsafe",
 | 
			
		||||
        "nitrous": "Safe & Decrease",
 | 
			
		||||
        "amphetamines": "Safe & Decrease",
 | 
			
		||||
        "mdma": "Safe & Decrease",
 | 
			
		||||
        "cocaine": "Safe & Decrease",
 | 
			
		||||
        "caffeine": "Safe & Decrease",
 | 
			
		||||
        "alcohol": "Deadly",
 | 
			
		||||
        "ghb/gbl": "Deadly",
 | 
			
		||||
        "opioids": "Deadly",
 | 
			
		||||
        "tramadol": "Deadly",
 | 
			
		||||
        "maois": "Safe & Synergy",
 | 
			
		||||
        "ssris": "Safe & No Synergy"
 | 
			
		||||
    },
 | 
			
		||||
    "maois": {
 | 
			
		||||
        "lsd": "Safe & Decrease",
 | 
			
		||||
        "mushrooms": "Safe & Synergy",
 | 
			
		||||
        "dmt": "Safe & Synergy",
 | 
			
		||||
        "mescaline": "Serotonin Syndrome",
 | 
			
		||||
        "dox": "Serotonin Syndrome",
 | 
			
		||||
        "nbomes": "Serotonin Syndrome",
 | 
			
		||||
        "2c-x": "Serotonin Syndrome",
 | 
			
		||||
        "2c-t-x": "Serotonin Syndrome",
 | 
			
		||||
        "αmt": "Serotonin Syndrome",
 | 
			
		||||
        "5-meo-xxt": "Serotonin Syndrome",
 | 
			
		||||
        "cannabis": "Safe & Synergy",
 | 
			
		||||
        "ketamine": "Safe & No Synergy",
 | 
			
		||||
        "mxe": "Serotonin Syndrome",
 | 
			
		||||
        "dxm": "Serotonin Syndrome",
 | 
			
		||||
        "pcp": "Serotonin Syndrome",
 | 
			
		||||
        "nitrous": "Safe & No Synergy",
 | 
			
		||||
        "amphetamines": "Serotonin Syndrome",
 | 
			
		||||
        "mdma": "Serotonin Syndrome",
 | 
			
		||||
        "cocaine": "Serotonin Syndrome",
 | 
			
		||||
        "caffeine": "Safe & No Synergy",
 | 
			
		||||
        "alcohol": "Unsafe",
 | 
			
		||||
        "ghb/gbl": "Safe & Synergy",
 | 
			
		||||
        "opioids": "Unsafe",
 | 
			
		||||
        "tramadol": "Serotonin Syndrome",
 | 
			
		||||
        "benzodiazepines": "Safe & Synergy",
 | 
			
		||||
        "ssris": "Serotonin Syndrome"
 | 
			
		||||
    },
 | 
			
		||||
    "ssris": {
 | 
			
		||||
        "lsd": "Safe & Decrease",
 | 
			
		||||
        "mushrooms": "Safe & Decrease",
 | 
			
		||||
        "dmt": "Safe & Decrease",
 | 
			
		||||
        "mescaline": "Safe & Decrease",
 | 
			
		||||
        "dox": "Safe & Decrease",
 | 
			
		||||
        "nbomes": "Safe & Decrease",
 | 
			
		||||
        "2c-x": "Safe & Decrease",
 | 
			
		||||
        "2c-t-x": "Serotonin Syndrome",
 | 
			
		||||
        "αmt": "Serotonin Syndrome",
 | 
			
		||||
        "5-meo-xxt": "Serotonin Syndrome",
 | 
			
		||||
        "cannabis": "Safe & No Synergy",
 | 
			
		||||
        "ketamine": "Safe & No Synergy",
 | 
			
		||||
        "mxe": "Unsafe",
 | 
			
		||||
        "dxm": "Serotonin Syndrome",
 | 
			
		||||
        "pcp": "Unsafe",
 | 
			
		||||
        "nitrous": "Safe & No Synergy",
 | 
			
		||||
        "amphetamines": "Safe & No Synergy",
 | 
			
		||||
        "mdma": "Safe & Decrease",
 | 
			
		||||
        "cocaine": "Unsafe",
 | 
			
		||||
        "caffeine": "Safe & No Synergy",
 | 
			
		||||
        "alcohol": "Unsafe",
 | 
			
		||||
        "ghb/gbl": "Safe & No Synergy",
 | 
			
		||||
        "opioids": "Serotonin Syndrome",
 | 
			
		||||
        "tramadol": "Serotonin Syndrome",
 | 
			
		||||
        "benzodiazepines": "Safe & No Synergy",
 | 
			
		||||
        "maois": "Serotonin Syndrome"
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										6
									
								
								tripsit/config.json
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										6
									
								
								tripsit/config.json
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,6 @@
 | 
			
		||||
{
 | 
			
		||||
    "dependencies": [ "report" ],
 | 
			
		||||
    "tripsitters": [],
 | 
			
		||||
    "dbType": "redis",
 | 
			
		||||
    "wikiTemplate": "= General Information = \n{summary}\nCategories: {categories} \n\n== History ==\n\n= Dosage = \n {dose} \n\n= Duration =\nOnset: {onset}\nDuration: {duration}\nAfter-effects: {after-effects} \n\n= Effects = \n {effects} \n\n=Harm Reduction= \n Avoid: {avoid} \n\n= Chemistry and Pharmacology = \n\n= Storage = \n\n= Legal ="
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										184
									
								
								tripsit/pages.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										184
									
								
								tripsit/pages.js
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,184 @@
 | 
			
		||||
var _ = require('underscore');
 | 
			
		||||
 | 
			
		||||
var cap = function(str) {
 | 
			
		||||
	return str.charAt(0).toUpperCase() + str.slice(1);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
var pages = function(dbot) {
 | 
			
		||||
    var pages = {
 | 
			
		||||
        '/factsheet/test': function(req, res) {
 | 
			
		||||
          res.end(req.user.access);
 | 
			
		||||
        },
 | 
			
		||||
 | 
			
		||||
        '/factsheet/wikitemplate/:drug': function(req, res) {
 | 
			
		||||
            this.api.getDrug(req.params.drug, function(drug) {
 | 
			
		||||
                if(drug) {
 | 
			
		||||
                    d = drug.properties;
 | 
			
		||||
if(!_.has(d,'categories')) d.categories = [];
 | 
			
		||||
res.header("Content-Type", "text/plain; charset=utf-8");
 | 
			
		||||
                    var template = this.config.wikiTemplate.format({
 | 
			
		||||
                        'dose': d.dose,
 | 
			
		||||
                        'onset': d.onset,
 | 
			
		||||
                        'duration': d.duration,
 | 
			
		||||
                        'avoid': d.avoid,
 | 
			
		||||
                        'categories': d.categories.join(', '),
 | 
			
		||||
                        'summary': d.summary,
 | 
			
		||||
                        'after-effects': d['after-effects'],
 | 
			
		||||
                        'effects': d.effects
 | 
			
		||||
                    });
 | 
			
		||||
                    template += '\n\n[[Category:Drugs]]\n';
 | 
			
		||||
                    _.each(d.categories,function(cat){template+='[[Category:'+cap(cat)+']]\n';});
 | 
			
		||||
                    res.end(template);
 | 
			
		||||
                }
 | 
			
		||||
            }.bind(this));
 | 
			
		||||
        },
 | 
			
		||||
 | 
			
		||||
        '/factsheet': function(req, res) {
 | 
			
		||||
            var drugs = []; 
 | 
			
		||||
            this.db.scan('drugs', function(drug) {
 | 
			
		||||
		if(drug && _.has(drug, 'name') && _.has(drug, 'properties')) {
 | 
			
		||||
		if(drug.name.length <= 4 || drug.name.indexOf('-') != -1) {
 | 
			
		||||
			drug.name = drug.name.toUpperCase();
 | 
			
		||||
		} else {
 | 
			
		||||
			drug.name = drug.name.charAt(0).toUpperCase() + drug.name.slice(1);
 | 
			
		||||
		}
 | 
			
		||||
drug.name = drug.name.replace(/MEO/, 'MeO');
 | 
			
		||||
drug.name = drug.name.replace(/ACO/, 'AcO');
 | 
			
		||||
drug.name = drug.name.replace(/NBOME/, 'NBOMe');
 | 
			
		||||
drug.name = drug.name.replace(/MIPT/, 'MiPT');
 | 
			
		||||
drug.name = drug.name.replace(/DIPT/, 'DiPT');
 | 
			
		||||
                drugs.push(drug); 
 | 
			
		||||
		}
 | 
			
		||||
            }, function() {
 | 
			
		||||
drugs = _.sortBy(drugs, 'name');
 | 
			
		||||
                res.render('fs_list', {
 | 
			
		||||
                    'drugs': drugs,
 | 
			
		||||
	            'thing': 'Factsheets'
 | 
			
		||||
                }); 
 | 
			
		||||
            });
 | 
			
		||||
        },
 | 
			
		||||
 | 
			
		||||
        '/factsheet/edit': function(req, res) {
 | 
			
		||||
            var name = req.body.name,
 | 
			
		||||
                params = req.body,
 | 
			
		||||
                pValues = _.omit(params, 'name', 'newname', 'categories', 'aliases', 'formatted_dose'),
 | 
			
		||||
                response = {
 | 
			
		||||
                    'error': null,
 | 
			
		||||
                    'drug': null
 | 
			
		||||
                };
 | 
			
		||||
	
 | 
			
		||||
		if(!_.has(req, 'user') || (_.has(req, 'user') && req.user.access == 'user')) {
 | 
			
		||||
		    response.error = 'Unauthenticated.';
 | 
			
		||||
		    return res.json(response);
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
            this.api.getDrug(params.name, function(drug) {
 | 
			
		||||
                if(drug) {
 | 
			
		||||
                    if(_.has(params, 'categories')) {
 | 
			
		||||
                        var categories = params.categories.replace(/\s/g,'').split(',');
 | 
			
		||||
                            availableCategories = [ 'psychedelic', 'benzodiazepine',
 | 
			
		||||
                              'dissociative', 'opioid', 'depressant', 'common', 'stimulant', 'habit-forming', 'research-chemical', 'empathogen', 'deliriant', 'nootropic', 'tentative', 'inactive' ];
 | 
			
		||||
                        if(_.difference(categories, availableCategories).length !== 0) {
 | 
			
		||||
                            response.error = 'Invalid category.';
 | 
			
		||||
                            return res.json(response);
 | 
			
		||||
                        }
 | 
			
		||||
                    }
 | 
			
		||||
                    
 | 
			
		||||
                    drug.categories = categories;
 | 
			
		||||
                    
 | 
			
		||||
                    _.each(pValues, function(property, index) {
 | 
			
		||||
                        drug.properties[index] = property;      
 | 
			
		||||
                    });
 | 
			
		||||
 | 
			
		||||
                    this.db.save('drugs', drug.name, drug, function(err, drug) {
 | 
			
		||||
                        if(_.has(params, 'newname') && params.newname !== drug.name) {
 | 
			
		||||
                            this.api.getDrug(params.newname, function(oDrug) {
 | 
			
		||||
                                if(oDrug) {
 | 
			
		||||
                                    response.error = params.newname + ' already exists.';
 | 
			
		||||
                                    return res.json(response);
 | 
			
		||||
                                } else {
 | 
			
		||||
                                    this.api.delDrug(drug.name, function() {
 | 
			
		||||
                                        drug.name = params.newname;
 | 
			
		||||
                                        this.db.create('drugs', drug.name, drug, function() {
 | 
			
		||||
                                            this.api.getDrug(drug.name, function(drug) {
 | 
			
		||||
                                                response.drug = drug;
 | 
			
		||||
                                                res.json(response);
 | 
			
		||||
                                                dbot.say('tripsit', '#content', dbot.t('websetdrug_log', {
 | 
			
		||||
                                                    'user': req.user.primaryNick,
 | 
			
		||||
                                                    'drug': drug.name
 | 
			
		||||
                                                }));
 | 
			
		||||
                                            });
 | 
			
		||||
                                        }.bind(this));
 | 
			
		||||
                                    }.bind(this));
 | 
			
		||||
                                }
 | 
			
		||||
                            }.bind(this));
 | 
			
		||||
                        } else {
 | 
			
		||||
                            this.api.getDrug(drug.name, function(drug) {
 | 
			
		||||
                                response.drug = drug;
 | 
			
		||||
                                res.json(response);
 | 
			
		||||
                                dbot.say('tripsit', '#content', dbot.t('websetdrug_log', {
 | 
			
		||||
                                    'user': req.user.primaryNick,
 | 
			
		||||
                                    'drug': drug.name
 | 
			
		||||
                                }));
 | 
			
		||||
 | 
			
		||||
                            });
 | 
			
		||||
                        }
 | 
			
		||||
                    }.bind(this));
 | 
			
		||||
                } else {
 | 
			
		||||
                    response.error = 'Unknown drug.';
 | 
			
		||||
                    res.json(response);
 | 
			
		||||
                }
 | 
			
		||||
            }.bind(this));
 | 
			
		||||
        },
 | 
			
		||||
 | 
			
		||||
        '/factsheet/:drug': function(req, res) {
 | 
			
		||||
            this.api.getDrug(req.params.drug, function(drug) {
 | 
			
		||||
                if(drug && !_.has(drug, 'err')) {
 | 
			
		||||
if(drug.name.length <= 3 || drug.name.indexOf('-') != -1) {
 | 
			
		||||
			drug.name = drug.name.toUpperCase();
 | 
			
		||||
		} else {
 | 
			
		||||
			drug.name = drug.name.charAt(0).toUpperCase() + drug.name.slice(1);
 | 
			
		||||
		}
 | 
			
		||||
                    if(_.has(drug.properties, 'dose')) { // LAAAAME
 | 
			
		||||
                        drug.properties.dose = drug.properties.dose.split('|');
 | 
			
		||||
                    }
 | 
			
		||||
 | 
			
		||||
                    if(_.has(drug.properties, 'onset')) { // LAAAAME
 | 
			
		||||
                        drug.properties.onset = drug.properties.onset.split('|');
 | 
			
		||||
                    }
 | 
			
		||||
 | 
			
		||||
                    if(_.has(drug.properties, 'wiki')) { // This is also kinda lame
 | 
			
		||||
                        drug.wiki = drug.properties.wiki;
 | 
			
		||||
                        delete drug.properties.wiki;
 | 
			
		||||
                    }
 | 
			
		||||
 | 
			
		||||
			var order = _.union(['summary', 'dose', 'onset', 'duration'], _.keys(drug.properties));
 | 
			
		||||
 | 
			
		||||
                    res.render('factsheet', {
 | 
			
		||||
                        'drug': drug,
 | 
			
		||||
			'order': order,
 | 
			
		||||
			'thing': drug.name + ' Factsheet'
 | 
			
		||||
                    });
 | 
			
		||||
                } else {
 | 
			
		||||
                    res.render('error', {
 | 
			
		||||
                        'name': req.params.drug
 | 
			
		||||
                    });
 | 
			
		||||
                }
 | 
			
		||||
            });
 | 
			
		||||
        },
 | 
			
		||||
 | 
			
		||||
        '/chanlist': function(req, res) {
 | 
			
		||||
            res.render('oclist', {
 | 
			
		||||
                 'channels': this.channels
 | 
			
		||||
            });
 | 
			
		||||
        }
 | 
			
		||||
    };
 | 
			
		||||
 | 
			
		||||
    pages['/factsheet/edit'].type = 'post';
 | 
			
		||||
 | 
			
		||||
    return pages;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
exports.fetch = function(dbot) {
 | 
			
		||||
    return pages(dbot);
 | 
			
		||||
};
 | 
			
		||||
							
								
								
									
										53
									
								
								tripsit/strings.json
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										53
									
								
								tripsit/strings.json
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,53 @@
 | 
			
		||||
{
 | 
			
		||||
    "tripsit_help": {
 | 
			
		||||
        "en": "Attention: {user} needs some help in {channel}",
 | 
			
		||||
        "fr": "Attention : {user} a besoin d'aide dans {channel}.",
 | 
			
		||||
	"de": "Achtung: {user} benötigt Hilfe in {channel}."
 | 
			
		||||
    },
 | 
			
		||||
    "tripsit_help_confirm": {
 | 
			
		||||
        "en": "{user}: Thanks, we've notified our tripsitters and they'll be with you shortly. In the mean time you can help us help you by sharing your substance, dose, time of dose, mindset and any other relevant info. Remember, you're in good hands here.",
 | 
			
		||||
        "fr": "{user} : Merci, nous avons notifié nos tripsitters et ils seront bientôt avec vous. En attendant, vous pouvez nous aider en indiquant la substance consommée, la dose, l'heure de prise, votre état d'esprit et tout autre information importante. Rappelez-vous, vous êtes entre de bonnes mains ici.",
 | 
			
		||||
	"de": "{user}: Danke, wir haben unsere tripsitter informiert und sie werden sich in Kürze bei dir melden. In der Zwischenzeit kannst du uns helfen, indem du uns Substanz, Dosis, Mindset und andere relevanten Informationen mitteilst. Denk dran, du bist in guten Händen hier." 
 | 
			
		||||
    },
 | 
			
		||||
    "tripsit_notifies_on": {
 | 
			
		||||
        "en": "You will now receive notifications of new users in #tripsit.",
 | 
			
		||||
	"de": "Du wirst keine Benachrichtigungen von neuen Benutzern in #tripsit erhalten."
 | 
			
		||||
    },
 | 
			
		||||
    "tripsit_already_notified": {
 | 
			
		||||
        "en": "You were already receiving notifications of new users in #tripsit.",
 | 
			
		||||
	"de": "Du erhälst bereits Benachrichtigungen von neuen Benutzern in #tripsit."
 | 
			
		||||
    },
 | 
			
		||||
    "tripsit_notifies_off": {
 | 
			
		||||
        "en": "You will no longer receive notifications of new users in #tripsit.",
 | 
			
		||||
	"de": "Du wirst nicht länger Benachrichtigungen von neuen Benutzern in #tripsit erhalten."
 | 
			
		||||
    },
 | 
			
		||||
    "tripsit_notifies_already_off": {
 | 
			
		||||
        "en": "You weren't receiving notifications of new users in #tripsit in the first place.",
 | 
			
		||||
	"de": "Benachrichtigung von neuen Benutzern in #tripsit war bereits deaktiviert."
 | 
			
		||||
    },
 | 
			
		||||
    "new_tripsit_user": {
 | 
			
		||||
        "en": "[{type}] {user} has joined #tripsit and may need some help.",
 | 
			
		||||
	"de": "[{type}] {user} hat #tripsit betreten und benötigt möglicherweise etwas Hilfe."
 | 
			
		||||
    },
 | 
			
		||||
    "setdrug_log": {
 | 
			
		||||
        "en": "[\u00036factsheets\u000f] {user} set {property} of {drug} to \"{content}\""
 | 
			
		||||
    },
 | 
			
		||||
    "addsource_log": {
 | 
			
		||||
        "en": "[\u00036factsheets\u000f] {user} added source for {property} of {drug}: \"{content}\""
 | 
			
		||||
    },
 | 
			
		||||
    "rmsource_log": {
 | 
			
		||||
        "en": "[\u00036factsheets\u000f] {user} removed source for {property} of {drug}: \"{content}\""
 | 
			
		||||
    },
 | 
			
		||||
    "websetdrug_log": {
 | 
			
		||||
        "en": "[\u00036factsheets\u000f] {user} modified {drug} (web)"
 | 
			
		||||
    },
 | 
			
		||||
    "rmdrugproperty_log": {
 | 
			
		||||
        "en": "[\u00036factsheets\u000f] {user} removed {property} from {drug}"
 | 
			
		||||
    },
 | 
			
		||||
    "rmdrug_log": {
 | 
			
		||||
        "en": "[\u00036factsheets\u000f] {user} removed {property}"
 | 
			
		||||
    },
 | 
			
		||||
    "deleted_dupe": {
 | 
			
		||||
        "en": "{creator}: Deleted duplicate #tripsit notification for {alias}, use #update"
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										1
									
								
								tripsit/tripsit
									
									
									
									
									
										Submodule
									
								
							
							
								
								
								
								
								
								
									
									
								
							
						
						
									
										1
									
								
								tripsit/tripsit
									
									
									
									
									
										Submodule
									
								
							@ -0,0 +1 @@
 | 
			
		||||
Subproject commit 3f952b039098db61c7fbeaf3a2b4140f12b0738a
 | 
			
		||||
							
								
								
									
										1175
									
								
								tripsit/tripsit.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										1175
									
								
								tripsit/tripsit.js
									
									
									
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										7
									
								
								tripsit/usage.json
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										7
									
								
								tripsit/usage.json
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,7 @@
 | 
			
		||||
{
 | 
			
		||||
    "~setdrug": "~setdrug [drugname] [propertyname] [content here]",
 | 
			
		||||
    "~rmdrug": "~rmdrug [drugname] (propertyname)",
 | 
			
		||||
    "~volume": "~volume [total material in mg] [target mg of material per ml]",
 | 
			
		||||
    "~perml": "~perml [total material in mg] [ml of solution]",
 | 
			
		||||
    "~oconvert": "~oconvert [amount]mg [sourceDrug] [targetROA] [targetDrug]"
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										32
									
								
								tripsit/views/factsheet.jade
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										32
									
								
								tripsit/views/factsheet.jade
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,32 @@
 | 
			
		||||
extends ../layout
 | 
			
		||||
 | 
			
		||||
block content
 | 
			
		||||
  p.text1
 | 
			
		||||
    u
 | 
			
		||||
        b ↳ 
 | 
			
		||||
        a(href='/') Index 
 | 
			
		||||
        > 
 | 
			
		||||
        a(href='/factsheet') Factsheets 
 | 
			
		||||
        > #{drug.name}
 | 
			
		||||
    table.table1
 | 
			
		||||
      thead
 | 
			
		||||
        tr
 | 
			
		||||
          th.theader(style='width: 25%;')
 | 
			
		||||
            | #{drug.name}
 | 
			
		||||
          th.theader(style='width: 75%;')
 | 
			
		||||
            | Info
 | 
			
		||||
    table.table2
 | 
			
		||||
      tbody.tbody1
 | 
			
		||||
        for property, name in drug.properties 
 | 
			
		||||
          - name = name.charAt(0).toUpperCase() + name.slice(1);
 | 
			
		||||
          tr
 | 
			
		||||
            td.tlefttext(style='width: 25%;') 
 | 
			
		||||
              b #{name}
 | 
			
		||||
            td.ttext(style='width: 75%;')
 | 
			
		||||
              - if (typeof(property) === 'string'){
 | 
			
		||||
                | #{property}
 | 
			
		||||
              -} else {
 | 
			
		||||
                -each line in property
 | 
			
		||||
                  | #{line}
 | 
			
		||||
                  br
 | 
			
		||||
              -}
 | 
			
		||||
							
								
								
									
										48
									
								
								tripsit/views/fs_list.jade
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										48
									
								
								tripsit/views/fs_list.jade
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,48 @@
 | 
			
		||||
extends ../layout
 | 
			
		||||
 | 
			
		||||
block content
 | 
			
		||||
  script(type="text/javascript", src="http://ajax.aspnetcdn.com/ajax/jquery.dataTables/1.9.4/jquery.dataTables.min.js")
 | 
			
		||||
  p.text1
 | 
			
		||||
      u
 | 
			
		||||
          b ↳ 
 | 
			
		||||
          a(href='/') Index 
 | 
			
		||||
          > Factsheets
 | 
			
		||||
  p
 | 
			
		||||
  
 | 
			
		||||
  table.table1
 | 
			
		||||
      thead
 | 
			
		||||
          tr
 | 
			
		||||
            th.theader(style='width: 30%;')
 | 
			
		||||
              | Name
 | 
			
		||||
            th.theader(style='width: 70%;')
 | 
			
		||||
              | Summary
 | 
			
		||||
      table.table2
 | 
			
		||||
        tbody.tbody1
 | 
			
		||||
          -each drug in drugs
 | 
			
		||||
            tr
 | 
			
		||||
              td.ttext(style='width: 30%;') 
 | 
			
		||||
                a.boxed2(href='/factsheet/'+drug.name) 
 | 
			
		||||
                  | #{drug.name}
 | 
			
		||||
                if drug.categories 
 | 
			
		||||
                  each kw in drug.categories
 | 
			
		||||
                    if kw == 'psychedelic'
 | 
			
		||||
                      span.label.label-warning(style='float:right;padding:3px;margin-right:5px;' data-placement="right") #{kw}
 | 
			
		||||
                    else if kw == 'benzodiazepine'
 | 
			
		||||
                      span.label.label-danger(style='background-color:#000;color:#FF0000;float:right;padding:3px;margin-right:5px;' data-placement="right") benzo
 | 
			
		||||
                    else if kw == 'stimulant'
 | 
			
		||||
                      span.label.label-info(style='float:right;padding:3px;margin-right:5px;' data-placement="right") stimulant
 | 
			
		||||
                    else if kw == 'dissociative'
 | 
			
		||||
                      span.label.label-default(style='background-color:purple;color:white;float:right;padding:3px;margin-right:5px;' data-placement="right") dissociative
 | 
			
		||||
                    else if kw == 'opioid'
 | 
			
		||||
                      span.label.label-success(style='float:right;padding:3px;margin-right:5px;' data-placement="right") opioid
 | 
			
		||||
                    else if kw == 'depressant'
 | 
			
		||||
                      span.label.label-danger(style='float:right;padding:3px;margin-right:5px;' data-placement="right") depressant 
 | 
			
		||||
                    else
 | 
			
		||||
                      span.label.label-default(style='float:right;padding:3px;margin-right:5px;' data-placement="right") other
 | 
			
		||||
                else
 | 
			
		||||
                  span.label.label-default(style='float:right;padding:3px;margin-right:5px;' data-placement="right") other
 | 
			
		||||
              td.ttext(style='width: 70%;')
 | 
			
		||||
                | #{drug.properties.summary}
 | 
			
		||||
   p
 | 
			
		||||
   p
 | 
			
		||||
   b Factsheets on #{drugs.length} drugs
 | 
			
		||||
							
								
								
									
										32
									
								
								tripsit/views/tripsit/factsheet.jade
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										32
									
								
								tripsit/views/tripsit/factsheet.jade
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,32 @@
 | 
			
		||||
extends ../layout
 | 
			
		||||
 | 
			
		||||
block content
 | 
			
		||||
  p.text1
 | 
			
		||||
    u
 | 
			
		||||
        b ↳ 
 | 
			
		||||
        a(href='/') Index 
 | 
			
		||||
        > 
 | 
			
		||||
        a(href='/factsheet') Factsheets 
 | 
			
		||||
        > #{drug.name}
 | 
			
		||||
    table.table1
 | 
			
		||||
      thead
 | 
			
		||||
        tr
 | 
			
		||||
          th.theader(style='width: 25%;')
 | 
			
		||||
            | #{drug.name}
 | 
			
		||||
          th.theader(style='width: 75%;')
 | 
			
		||||
            | Info
 | 
			
		||||
    table.table2
 | 
			
		||||
      tbody.tbody1
 | 
			
		||||
        for property, name in drug.properties 
 | 
			
		||||
          - name = name.charAt(0).toUpperCase() + name.slice(1);
 | 
			
		||||
          tr
 | 
			
		||||
            td.tlefttext(style='width: 25%;') 
 | 
			
		||||
              b #{name}
 | 
			
		||||
            td.ttext(style='width: 75%;')
 | 
			
		||||
              - if (typeof(property) === 'string'){
 | 
			
		||||
                | #{property}
 | 
			
		||||
              -} else {
 | 
			
		||||
                -each line in property
 | 
			
		||||
                  | #{line}
 | 
			
		||||
                  br
 | 
			
		||||
              -}
 | 
			
		||||
							
								
								
									
										48
									
								
								tripsit/views/tripsit/fs_list.jade
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										48
									
								
								tripsit/views/tripsit/fs_list.jade
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,48 @@
 | 
			
		||||
extends ../layout
 | 
			
		||||
 | 
			
		||||
block content
 | 
			
		||||
  script(type="text/javascript", src="http://ajax.aspnetcdn.com/ajax/jquery.dataTables/1.9.4/jquery.dataTables.min.js")
 | 
			
		||||
  p.text1
 | 
			
		||||
      u
 | 
			
		||||
          b ↳ 
 | 
			
		||||
          a(href='/') Index 
 | 
			
		||||
          > Factsheets
 | 
			
		||||
  p
 | 
			
		||||
  
 | 
			
		||||
  table.table1
 | 
			
		||||
      thead
 | 
			
		||||
          tr
 | 
			
		||||
            th.theader(style='width: 30%;')
 | 
			
		||||
              | Name
 | 
			
		||||
            th.theader(style='width: 70%;')
 | 
			
		||||
              | Summary
 | 
			
		||||
      table.table2
 | 
			
		||||
        tbody.tbody1
 | 
			
		||||
          -each drug in drugs
 | 
			
		||||
            tr
 | 
			
		||||
              td.ttext(style='width: 30%;') 
 | 
			
		||||
                a.boxed2(href='/factsheet/'+drug.name) 
 | 
			
		||||
                  | #{drug.name}
 | 
			
		||||
                if drug.categories 
 | 
			
		||||
                  each kw in drug.categories
 | 
			
		||||
                    if kw == 'psychedelic'
 | 
			
		||||
                      span.label.label-warning(style='float:right;padding:3px;margin-right:5px;' data-placement="right") #{kw}
 | 
			
		||||
                    else if kw == 'benzodiazepine'
 | 
			
		||||
                      span.label.label-danger(style='background-color:#000;color:#FF0000;float:right;padding:3px;margin-right:5px;' data-placement="right") benzo
 | 
			
		||||
                    else if kw == 'stimulant'
 | 
			
		||||
                      span.label.label-info(style='float:right;padding:3px;margin-right:5px;' data-placement="right") stimulant
 | 
			
		||||
                    else if kw == 'dissociative'
 | 
			
		||||
                      span.label.label-default(style='background-color:purple;color:white;float:right;padding:3px;margin-right:5px;' data-placement="right") dissociative
 | 
			
		||||
                    else if kw == 'opioid'
 | 
			
		||||
                      span.label.label-success(style='float:right;padding:3px;margin-right:5px;' data-placement="right") opioid
 | 
			
		||||
                    else if kw == 'depressant'
 | 
			
		||||
                      span.label.label-danger(style='float:right;padding:3px;margin-right:5px;' data-placement="right") depressant 
 | 
			
		||||
                    else
 | 
			
		||||
                      span.label.label-default(style='float:right;padding:3px;margin-right:5px;' data-placement="right") other
 | 
			
		||||
                else
 | 
			
		||||
                  span.label.label-default(style='float:right;padding:3px;margin-right:5px;' data-placement="right") other
 | 
			
		||||
              td.ttext(style='width: 70%;')
 | 
			
		||||
                | #{drug.properties.summary}
 | 
			
		||||
   p
 | 
			
		||||
   p
 | 
			
		||||
   b Factsheets on #{drugs.length} drugs
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user