cold hard uspam
This commit is contained in:
commit
ecc15291d7
5
.dockerignore
Normal file
5
.dockerignore
Normal file
@ -0,0 +1,5 @@
|
||||
node_modules
|
||||
npm-debug.log
|
||||
Dockerfile
|
||||
.dockerignore
|
||||
docker-compose.yml
|
132
.gitignore
vendored
Normal file
132
.gitignore
vendored
Normal file
@ -0,0 +1,132 @@
|
||||
# Logs
|
||||
logs
|
||||
*.log
|
||||
npm-debug.log*
|
||||
yarn-debug.log*
|
||||
yarn-error.log*
|
||||
lerna-debug.log*
|
||||
.pnpm-debug.log*
|
||||
|
||||
# Diagnostic reports (https://nodejs.org/api/report.html)
|
||||
report.[0-9]*.[0-9]*.[0-9]*.[0-9]*.json
|
||||
|
||||
# Runtime data
|
||||
pids
|
||||
*.pid
|
||||
*.seed
|
||||
*.pid.lock
|
||||
|
||||
# Directory for instrumented libs generated by jscoverage/JSCover
|
||||
lib-cov
|
||||
|
||||
# Coverage directory used by tools like istanbul
|
||||
coverage
|
||||
*.lcov
|
||||
|
||||
# nyc test coverage
|
||||
.nyc_output
|
||||
|
||||
# Grunt intermediate storage (https://gruntjs.com/creating-plugins#storing-task-files)
|
||||
.grunt
|
||||
|
||||
# Bower dependency directory (https://bower.io/)
|
||||
bower_components
|
||||
|
||||
# node-waf configuration
|
||||
.lock-wscript
|
||||
|
||||
# Compiled binary addons (https://nodejs.org/api/addons.html)
|
||||
build/Release
|
||||
|
||||
# Dependency directories
|
||||
node_modules/
|
||||
jspm_packages/
|
||||
|
||||
# Snowpack dependency directory (https://snowpack.dev/)
|
||||
web_modules/
|
||||
|
||||
# TypeScript cache
|
||||
*.tsbuildinfo
|
||||
|
||||
# Optional npm cache directory
|
||||
.npm
|
||||
|
||||
# Optional eslint cache
|
||||
.eslintcache
|
||||
|
||||
# Optional stylelint cache
|
||||
.stylelintcache
|
||||
|
||||
# Microbundle cache
|
||||
.rpt2_cache/
|
||||
.rts2_cache_cjs/
|
||||
.rts2_cache_es/
|
||||
.rts2_cache_umd/
|
||||
|
||||
# Optional REPL history
|
||||
.node_repl_history
|
||||
|
||||
# Output of 'npm pack'
|
||||
*.tgz
|
||||
|
||||
# Yarn Integrity file
|
||||
.yarn-integrity
|
||||
|
||||
# dotenv environment variable files
|
||||
.env
|
||||
.env.development.local
|
||||
.env.test.local
|
||||
.env.production.local
|
||||
.env.local
|
||||
|
||||
# parcel-bundler cache (https://parceljs.org/)
|
||||
.cache
|
||||
.parcel-cache
|
||||
|
||||
# Next.js build output
|
||||
.next
|
||||
out
|
||||
|
||||
# Nuxt.js build / generate output
|
||||
.nuxt
|
||||
dist
|
||||
|
||||
# Gatsby files
|
||||
.cache/
|
||||
# Comment in the public line in if your project uses Gatsby and not Next.js
|
||||
# https://nextjs.org/blog/next-9-1#public-directory-support
|
||||
# public
|
||||
|
||||
# vuepress build output
|
||||
.vuepress/dist
|
||||
|
||||
# vuepress v2.x temp and cache directory
|
||||
.temp
|
||||
.cache
|
||||
|
||||
# Docusaurus cache and generated files
|
||||
.docusaurus
|
||||
|
||||
# Serverless directories
|
||||
.serverless/
|
||||
|
||||
# FuseBox cache
|
||||
.fusebox/
|
||||
|
||||
# DynamoDB Local files
|
||||
.dynamodb/
|
||||
|
||||
# TernJS port file
|
||||
.tern-port
|
||||
|
||||
# Stores VSCode versions used for testing VSCode extensions
|
||||
.vscode-test
|
||||
|
||||
# yarn v2
|
||||
.yarn/cache
|
||||
.yarn/unplugged
|
||||
.yarn/build-state.yml
|
||||
.yarn/install-state.gz
|
||||
.pnp.*
|
||||
|
||||
.env
|
8
Dockerfile
Normal file
8
Dockerfile
Normal file
@ -0,0 +1,8 @@
|
||||
FROM node:14
|
||||
RUN mkdir -p /home/node/app/node_modules && chown -R node:node /home/node/app
|
||||
WORKDIR /home/node/app
|
||||
COPY package*.json ./
|
||||
USER node
|
||||
RUN npm i
|
||||
COPY --chown=node:node . .
|
||||
CMD [ "node", "index.js" ]
|
5
docker-compose.yml
Normal file
5
docker-compose.yml
Normal file
@ -0,0 +1,5 @@
|
||||
version: '3.3'
|
||||
services:
|
||||
fascinus:
|
||||
build: .
|
||||
restart: always
|
116
index.js
Normal file
116
index.js
Normal file
@ -0,0 +1,116 @@
|
||||
var irc = require("irc");
|
||||
var fs = require("fs");
|
||||
var request = require('request');
|
||||
var art = require('ascii-art');
|
||||
var crypto = require('crypto').webcrypto;
|
||||
var randomext = require('./random-ext')
|
||||
|
||||
var config = { //edit your shit here
|
||||
server: "irc.supernets.org",
|
||||
//server: "irc.goat.chat",
|
||||
port: 6697,
|
||||
SSL: true,
|
||||
channels: ['#superbowl', '#dev'],
|
||||
//channels: ['#dev2'],
|
||||
botName: "fascinus",
|
||||
userName: "fascinus",
|
||||
realName: "Sneed"
|
||||
};
|
||||
|
||||
var bot = new irc.Client(config.server, config.botName, {
|
||||
channels: config.channels,
|
||||
secure: config.SSL,
|
||||
port: config.port,
|
||||
autoRejoin: true,
|
||||
userName: config.userName,
|
||||
realName: config.realName,
|
||||
floodProtection: false,
|
||||
floodProtectionDelay: 0
|
||||
});
|
||||
|
||||
const generateRandomString = (amt) => {
|
||||
const chars =
|
||||
"AaBbCcDdEeFfGgHhIiJjKkLlMmNnOoPpQqRrSsTtUuVvWwXxYyZz1234567890`!@#$%^&*()_+{}|\"\',./ᘈᷞኬᲡ᩶ᐨᅚ⸗⡳ᾟⓅᤲ⧛ሥ⸰⯠ᬨ⧻Შ⼷ᢕ᭄◁ⱉጻ᪅⎑ᘂᏤ⛰⃡";
|
||||
const randomArray = Array.from(
|
||||
{ length: amt },
|
||||
(v, k) => chars[Math.floor(Math.random() * chars.length)]
|
||||
);
|
||||
const randomString = randomArray.join("");
|
||||
return randomString;
|
||||
}
|
||||
|
||||
const randomUnicode = (amt) => {
|
||||
var array = new Uint16Array(amt);
|
||||
crypto.getRandomValues(array);
|
||||
var randStr = '';
|
||||
for (var i = 0; i < array.amt; i++) {
|
||||
randStr += String.fromCharCode(array[i]);
|
||||
};
|
||||
return randStr;
|
||||
}
|
||||
|
||||
async function help(chan) {
|
||||
bot.say(chan, 'Fascinus')
|
||||
bot.say(chan, "$flood [TEXT] [AMOUNT] - Floods the channel with a specific line x amount of times")
|
||||
bot.say(chan, "$ctcpflood [TARGET] [TEXT (one word)] [AMOUNT] - Sends x amount of CTCP requests to a target.")
|
||||
bot.say(chan, "$sneed - Pastes the Sneed's Feed and Seed copypasta.")
|
||||
}
|
||||
|
||||
async function flood(text, chan, times) {
|
||||
for(var i=0; i < times; i++){
|
||||
bot.say(chan, text);
|
||||
}
|
||||
}
|
||||
|
||||
async function sneed(chan) {
|
||||
bot.say(chan, 'THE SIGN IS A SUBTLE JOKE. THE SHOP IS CALLED \"SNEED\'S FEED & SEED\", WHERE')
|
||||
bot.say(chan, 'FEED AND SEED BOTH END IN THE SOUND "-EED", THUS RHYMING WITH THE NAME OF')
|
||||
bot.say(chan, 'THE OWNER, SNEED. THE SIGN SAYS THAT THE SHOP WAS "FORMERLY CHUCK\'S", IMPLYING')
|
||||
bot.say(chan, 'THAT THE TWO WORDS BEGINNING WITH "F" AND "S" WOULD HAVE ENDED WITH "-UCK",')
|
||||
bot.say(chan, 'RHYMING WITH "CHUCK". SO, WHEN CHUCK OWNED THE SHOP, IT WOULD HAVE BEEN CALLED')
|
||||
bot.say(chan, '"CHUCK\'S FUCK AND SUCK".')
|
||||
}
|
||||
|
||||
async function ctcp(target, text, amt) {
|
||||
for(var i=0; i < amt; i++){
|
||||
bot.ctcp(target, "privmsg", text);
|
||||
await timer(1000);
|
||||
}
|
||||
}
|
||||
|
||||
async function rspam(chan, amt) {
|
||||
for(var i=0; i < amt; i++){
|
||||
bot.say(chan, generateRandomString(60));
|
||||
}
|
||||
}
|
||||
|
||||
async function uspam(chan, amt){
|
||||
for(var i=0; i < amt; i++){
|
||||
bot.say(chan, "0" + randomext.integer(9,0) + randomext.uString(60,40));
|
||||
}
|
||||
}
|
||||
|
||||
const timer = ms => new Promise(res => setTimeout(res, ms))
|
||||
|
||||
bot.addListener('message', function(nick, to, text, from) {
|
||||
var args = text.split(' ');
|
||||
if (args[0] === '$help') {
|
||||
help(to);
|
||||
} else if (args[0] === '$flood') {
|
||||
flood(args[1], to, args[2]);
|
||||
} else if (args[0] === '$sneed') {
|
||||
sneed(to);
|
||||
} else if (args[0] === '$ctcpflood') {
|
||||
ctcp(args[1], args[2], args[3]);
|
||||
} else if (args[0] === '$rspam') {
|
||||
rspam(to, args[1])
|
||||
} else if (args[0] === '$uspam') {
|
||||
uspam(to, args[1]);
|
||||
}
|
||||
});
|
||||
|
||||
bot.addListener('error', function(message) {
|
||||
console.log('error: ', message);
|
||||
});
|
||||
|
||||
console.log('Starting Fascinus');
|
4027
package-lock.json
generated
Normal file
4027
package-lock.json
generated
Normal file
File diff suppressed because it is too large
Load Diff
19
package.json
Normal file
19
package.json
Normal file
@ -0,0 +1,19 @@
|
||||
{
|
||||
"name": "fascinus",
|
||||
"version": "1.0.0",
|
||||
"description": "",
|
||||
"main": "index.js",
|
||||
"dependencies": {
|
||||
"ascii-art": "^2.8.5",
|
||||
"crypto": "^1.0.1",
|
||||
"dotenv": "^16.3.1",
|
||||
"fs": "^0.0.1-security",
|
||||
"irc": "^0.5.2",
|
||||
"request": "^2.88.2"
|
||||
},
|
||||
"scripts": {
|
||||
"test": "echo \"Error: no test specified\" && exit 1"
|
||||
},
|
||||
"author": "hogwart7",
|
||||
"license": ""
|
||||
}
|
389
random-ext.js
Normal file
389
random-ext.js
Normal file
@ -0,0 +1,389 @@
|
||||
/*!
|
||||
* random-ext
|
||||
* https://github.com/bkumar2/random-ext.git
|
||||
*
|
||||
* Copyright 2014 Bipul Kumar
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
function _array(length, elementFunction, args) {
|
||||
var array = [];
|
||||
if (length != null) {
|
||||
for (var i = 0; i < length; ++i) {
|
||||
array[i] = elementFunction.apply(this, args);
|
||||
}
|
||||
} else {
|
||||
throw "length is required.";
|
||||
}
|
||||
return array;
|
||||
}
|
||||
|
||||
function boolean() {
|
||||
return Math.random() < 0.5;
|
||||
}
|
||||
|
||||
function booleanArray(length) {
|
||||
return _array(length, boolean);
|
||||
}
|
||||
|
||||
function float(limit, min) {
|
||||
if (limit != null) {
|
||||
if (min != null) {
|
||||
return Math.random() * (limit - min) + min;
|
||||
} else {
|
||||
return Math.random() * limit;
|
||||
}
|
||||
} else {
|
||||
throw "max is required.";
|
||||
}
|
||||
}
|
||||
|
||||
function floatArray(length, limit, min) {
|
||||
return _array(length, float, [limit, min]);
|
||||
}
|
||||
|
||||
function integer(max, min) {
|
||||
if (max != null) {
|
||||
if (min != null) {
|
||||
if (max < min) {
|
||||
throw "max [" + max + "] is less than min [" + min + "]";
|
||||
}
|
||||
return Math.floor(Math.random() * (max - min + 1)) + min;
|
||||
} else {
|
||||
return Math.floor(Math.random() * (max + 1));
|
||||
}
|
||||
} else {
|
||||
throw "max is required.";
|
||||
}
|
||||
}
|
||||
|
||||
function integerArray(length, max, min) {
|
||||
return _array(length, integer, [max, min]);
|
||||
}
|
||||
|
||||
function _normalizeRanges(ranges) {
|
||||
if (randomExt.DEBUG) {
|
||||
console.log("Normalizing ranges:", ranges);
|
||||
}
|
||||
ranges.sort(function (a, b) {
|
||||
return a[0] - b[0];
|
||||
});
|
||||
if (randomExt.DEBUG) {
|
||||
console.log("sorted ranges:", ranges);
|
||||
}
|
||||
for (var i = 0; i < ranges.length - 1; ++i) {
|
||||
for (var j = i + 1; j < ranges.length; ++j) {
|
||||
// remove right contained
|
||||
if (ranges[i][1] >= ranges[j][1]) {
|
||||
ranges.splice(j, 1);
|
||||
j--;
|
||||
}
|
||||
// fix overlap
|
||||
else if (ranges[i][1] >= ranges[j][0]) {
|
||||
ranges[j][0] = ranges[i][1] + 1;
|
||||
}
|
||||
if (randomExt.DEBUG) {
|
||||
console.log("iteration (" + i + "," + j + "):", ranges);
|
||||
}
|
||||
}
|
||||
}
|
||||
if (randomExt.DEBUG) {
|
||||
console.log("Normalized ranges:", ranges);
|
||||
}
|
||||
}
|
||||
|
||||
function _integerFromRanges(ranges) {
|
||||
_normalizeRanges(ranges);
|
||||
if (ranges != null) {
|
||||
var span = 0;
|
||||
for (var i = 0; i < ranges.length; ++i) {
|
||||
span += ranges[i][1] - ranges[i][0] + 1;
|
||||
}
|
||||
var randomNumber = Math.floor(Math.random() * span);
|
||||
for (var i = 0; i < ranges.length; ++i) {
|
||||
randomNumber += ranges[i][0];
|
||||
if (randomNumber <= ranges[i][1]) {
|
||||
break;
|
||||
} else {
|
||||
randomNumber -= ranges[i][1] + 1;
|
||||
}
|
||||
}
|
||||
return randomNumber;
|
||||
} else {
|
||||
throw "ranges is required.";
|
||||
}
|
||||
}
|
||||
|
||||
function _integerArrayFromRanges(length, ranges) {
|
||||
var numberArray = [];
|
||||
if (length != null && ranges != null) {
|
||||
for (var i = 0; i < length; ++i) {
|
||||
numberArray[i] = _integerFromRanges(ranges);
|
||||
}
|
||||
} else {
|
||||
throw "length and ranges is required.";
|
||||
}
|
||||
return numberArray;
|
||||
}
|
||||
|
||||
function _stringFromRanges(maxLength, minLength, ranges) {
|
||||
var dString = "";
|
||||
var length = integer(maxLength, minLength);
|
||||
var unicodeNumbers = _integerArrayFromRanges(length, ranges);
|
||||
dString = String.fromCharCode.apply(this, unicodeNumbers);
|
||||
return dString;
|
||||
}
|
||||
|
||||
function date(endDate, startDate) {
|
||||
if (endDate == null) {
|
||||
throw "end date is required.";
|
||||
}
|
||||
var endDateTime = endDate.getTime();
|
||||
var startDateTime = startDate != null ? startDate.getTime() : 0;
|
||||
return new Date(integer(endDateTime, startDateTime));
|
||||
}
|
||||
|
||||
function dateArray(length, endDate, startDate) {
|
||||
return _array(length, date, [endDate, startDate]);
|
||||
}
|
||||
|
||||
function string(maxLength, minLength) {
|
||||
if (randomExt.DEBUG) {
|
||||
console.log("string maxLength:", maxLength, " minLength:", minLength);
|
||||
}
|
||||
return _stringFromRanges(maxLength, minLength, [[32, 126]]);
|
||||
}
|
||||
|
||||
function uString(maxLength, minLength) {
|
||||
if (randomExt.DEBUG) {
|
||||
console.log("string maxLength:", maxLength, " minLength:", minLength);
|
||||
}
|
||||
return _stringFromRanges(maxLength, minLength, [[1, 9999]]);
|
||||
}
|
||||
|
||||
function stringArray(arrayLength, stringMaxLength, stringMinLength) {
|
||||
return _array(arrayLength, string, [stringMaxLength, stringMinLength]);
|
||||
}
|
||||
|
||||
function restrictedString(content, maxLength, minLength) {
|
||||
var ranges = [];
|
||||
for (var i = 0; i < content.length; ++i) {
|
||||
var contentType = content[i];
|
||||
switch (contentType) {
|
||||
case randomExt.CHAR_TYPE.SPECIAL:
|
||||
ranges = ranges.concat([
|
||||
[33, 47],
|
||||
[58, 64],
|
||||
[91, 96],
|
||||
[123, 126],
|
||||
]);
|
||||
break;
|
||||
case randomExt.CHAR_TYPE.SPACE:
|
||||
ranges = ranges.concat([[32, 32]]);
|
||||
break;
|
||||
case randomExt.CHAR_TYPE.NUMERIC:
|
||||
ranges = ranges.concat([[48, 57]]);
|
||||
break;
|
||||
case randomExt.CHAR_TYPE.UPPERCASE:
|
||||
ranges = ranges.concat([[65, 90]]);
|
||||
break;
|
||||
case randomExt.CHAR_TYPE.LOWERCASE:
|
||||
ranges = ranges.concat([[97, 122]]);
|
||||
break;
|
||||
case randomExt.CHAR_TYPE.HEX:
|
||||
ranges = ranges.concat([
|
||||
[48, 57],
|
||||
[97, 102],
|
||||
]);
|
||||
break;
|
||||
default:
|
||||
if (typeof contentType === "string") {
|
||||
for (var j = 0; j < contentType.length; ++j) {
|
||||
ranges = ranges.concat([
|
||||
[contentType.charCodeAt(j), contentType.charCodeAt(j)],
|
||||
]);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
return _stringFromRanges(maxLength, minLength, ranges);
|
||||
}
|
||||
|
||||
function restrictedStringArray(arrayLength, content, stringMaxLength, stringMinLength) {
|
||||
return _array(arrayLength, restrictedString, [content, stringMaxLength, stringMinLength]);
|
||||
}
|
||||
|
||||
function _fromDescriptor(randomDescriptor) {
|
||||
var randomValue = null;
|
||||
if (
|
||||
randomDescriptor == null ||
|
||||
!randomDescriptor.shift ||
|
||||
randomDescriptor.length <= 0 ||
|
||||
typeof randomDescriptor[0] !== "function"
|
||||
) {
|
||||
randomValue = randomDescriptor;
|
||||
} else {
|
||||
var randomFunction = randomDescriptor[0];
|
||||
if (randomDescriptor.length > 1) {
|
||||
var propertyValueArgs = randomDescriptor.slice(1, randomDescriptor.length);
|
||||
randomValue = randomFunction.apply(this, propertyValueArgs);
|
||||
} else {
|
||||
randomValue = randomFunction();
|
||||
}
|
||||
}
|
||||
return randomValue;
|
||||
}
|
||||
|
||||
function object(template) {
|
||||
if (randomExt.DEBUG) {
|
||||
console.log("object template:", template);
|
||||
}
|
||||
var newObject = {};
|
||||
var properties = Object.getOwnPropertyNames(template);
|
||||
for (var i = 0; i < properties.length; ++i) {
|
||||
var property = properties[i];
|
||||
var randomDescriptor = template[property];
|
||||
newObject[property] = _fromDescriptor(randomDescriptor);
|
||||
}
|
||||
return newObject;
|
||||
}
|
||||
|
||||
function objectArray(length, template) {
|
||||
return _array(length, object, [template]);
|
||||
}
|
||||
|
||||
function stringPattern(pattern, variableDefinition) {
|
||||
var stringPattern = pattern;
|
||||
var properties = Object.getOwnPropertyNames(variableDefinition);
|
||||
var replacedStringArray = new Array();
|
||||
for (var i = 0; i < stringPattern.length; ++i) {
|
||||
if (variableDefinition.hasOwnProperty(stringPattern[i])) {
|
||||
replacedStringArray[i] = _fromDescriptor(variableDefinition[stringPattern[i]]);
|
||||
} else {
|
||||
replacedStringArray[i] = stringPattern[i];
|
||||
}
|
||||
}
|
||||
return replacedStringArray.join("");
|
||||
}
|
||||
|
||||
function stringPatternArray(length, pattern, variableDefinition) {
|
||||
return _array(length, stringPattern, [pattern, variableDefinition]);
|
||||
}
|
||||
|
||||
function pick(array) {
|
||||
if (array == null) {
|
||||
throw "input array is null or undefined.";
|
||||
}
|
||||
return array[integer(array.length - 1)];
|
||||
}
|
||||
|
||||
function shuffle(array) {
|
||||
if (array == null) {
|
||||
throw "input array is null or undefined.";
|
||||
}
|
||||
for (var i = 0; i < array.length; ++i) {
|
||||
var randomIndex = integer(array.length - 1);
|
||||
var temp = array[randomIndex];
|
||||
array[randomIndex] = array[i];
|
||||
array[i] = temp;
|
||||
}
|
||||
}
|
||||
|
||||
function subArray(array, length) {
|
||||
// validation
|
||||
if (array == null) {
|
||||
throw "input array is null or undefined.";
|
||||
} else if (length == null) {
|
||||
throw "input length is null or undefined.";
|
||||
} else if (array.length < length) {
|
||||
throw "input length [" + length + "] must not exceed array length [" + array.length + "]";
|
||||
}
|
||||
// logic
|
||||
var copiedArray = array.slice();
|
||||
shuffle(copiedArray);
|
||||
return copiedArray.slice(0, length);
|
||||
}
|
||||
|
||||
function splitArray(array, count, ensureEqualSize) {
|
||||
if (array == null || count == null) {
|
||||
throw "array and count is required.";
|
||||
}
|
||||
if (array.length < count) {
|
||||
throw "input array length is not sufficient for the split.";
|
||||
}
|
||||
var arrayCopy = [...array];
|
||||
shuffle(arrayCopy);
|
||||
var outputArrays = [];
|
||||
for (var i = count, start = 0, remaining = arrayCopy.length; i > 0; --i) {
|
||||
var nextLength = ensureEqualSize
|
||||
? Math.ceil(remaining / i)
|
||||
: i === 1
|
||||
? remaining
|
||||
: integer(remaining - i, 1);
|
||||
var slicedArray = arrayCopy.slice(start, start + nextLength);
|
||||
remaining -= slicedArray.length;
|
||||
start += slicedArray.length;
|
||||
outputArrays.push(slicedArray);
|
||||
}
|
||||
return outputArrays;
|
||||
}
|
||||
|
||||
function color() {
|
||||
return "#".concat(((Math.random() * 0xffffff) << 0).toString(16));
|
||||
}
|
||||
|
||||
function guid() {
|
||||
return randomExt.stringPattern("xxxxxxxx-xxxx-yxxx-zxxx-xxxxxxxxxxxx", {
|
||||
x: [randomExt.restrictedString, [randomExt.CHAR_TYPE.HEX], 1, 1],
|
||||
y: [randomExt.restrictedString, ["12345"], 1, 1],
|
||||
z: [randomExt.restrictedString, ["89ab"], 1, 1],
|
||||
});
|
||||
}
|
||||
|
||||
var randomExt = {
|
||||
boolean: boolean,
|
||||
booleanArray: booleanArray,
|
||||
integer: integer,
|
||||
integerArray: integerArray,
|
||||
float: float,
|
||||
floatArray: floatArray,
|
||||
date: date,
|
||||
dateArray: dateArray,
|
||||
string: string,
|
||||
uString: uString,
|
||||
stringArray: stringArray,
|
||||
restrictedString: restrictedString,
|
||||
restrictedStringArray: restrictedStringArray,
|
||||
object: object,
|
||||
objectArray: objectArray,
|
||||
stringPattern: stringPattern,
|
||||
stringPatternArray: stringPatternArray,
|
||||
pick: pick,
|
||||
shuffle: shuffle,
|
||||
subArray: subArray,
|
||||
splitArray: splitArray,
|
||||
color: color,
|
||||
guid: guid,
|
||||
CHAR_TYPE: {
|
||||
LOWERCASE: 0,
|
||||
UPPERCASE: 1,
|
||||
NUMERIC: 2,
|
||||
SPECIAL: 3,
|
||||
SPACE: 4,
|
||||
HEX: 5,
|
||||
},
|
||||
DEBUG: false,
|
||||
};
|
||||
|
||||
module.exports = randomExt;
|
Loading…
Reference in New Issue
Block a user